![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam drobny problem z identyfikatorem auto_increment.
Cytat CREATE TABLE `session` ( `s_id` int(11) NOT NULL auto_increment, `s_phpsid` varchar(255) NOT NULL, `s_data` text NOT NULL, `s_start` datetime NOT NULL, `s_update` datetime NOT NULL, PRIMARY KEY (`s_id`), UNIQUE KEY `s_phpsid` (`s_phpsid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Wykonując zapytanie Nawet jeśli tylko podmienia wartości to i tak podnosi s_id o jeden. Co zrobić aby przy podmianie wpisywał zawsze tą samą wartość kolumny s_id ? Ten post edytował orglee 4.07.2008, 19:05:43 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
tak dziala replace - kasuje stary rekord, wklada nastepny. a skoro wklada nastepny to nadaje mu kolejny ID.
Powinienes uzyc insert into.... on duplicate key update http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
s_id jest zbędne w tej tabeli. Daj PRIMARY KEY na s_phpsid i ustaw mu typ danych na CHAR(32).
Rozwiąże to przy okazji twoje problemy z REPLACE |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
W sumie racje że zbędne miałem inna koncepcje wcześniej a przy jej zmianie zapomniałem wywalić s_id.
Dzięki wielkie jeszcze dwa pytania. nospor: Czy ON DUPLICATE jest standardem SQL czy tylko działa na MySQL'u ? Kicok: Jest jakaś szczególna różnica między VARCHAR(32) i CHAR(32) ? |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat nospor: Czy ON DUPLICATE jest standardem SQL czy tylko działa na MySQL'u ? nie wiem, nie kojarze by bylo np. w oraclu, ale duzo oracla nie uzywalem to moze przegapilem Cytat Kicok: Jest jakaś szczególna różnica między VARCHAR(32) i CHAR(32) ? pole typu char(32) zawsze bedzie zajmowalo 32 znaki, niezaleznie czy jest tam napis 'ala' czy 'ala ma kota i inne znaki do 32'.varchar(32) bedzie zajmowalo tyle bajtow ile ma znakow tekst w polu. Pamietaj ze jesli uzywasz char w tabeli, gdzie jest tez varchar, to char i tak bedzie traktowane jako varchar. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 5.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz dużo miejsca na bazę danych to używaj char zamiast varchar. Baza będzie o wiele szybciej chodziła i będzie bardziej odporna na zepsucie. Wynika to że przy charze każda zmienna zajmuje określone stałe bity na dysku i baza szybciej potrafi taką zmienną znaleść. No i fragmentacja danych przy char jest o wiele mniejsze.
Pozdrawiam |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Cytat Pamietaj ze jesli uzywasz char w tabeli, gdzie jest tez varchar, to char i tak bedzie traktowane jako varchar. Fakt. W tym przypadku jest kolumna typu TEXT, która również ma zmienną długość. Więc wzrostu wydajności w związku z używaniem CHAR(32) nie będzie, ale zaoszczędzisz cały 1 bajt pamięci na wiersz danych ;] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:40 |