Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Replace - Zmieniający się identyfikator
starach
post
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
  1. REPLACE INTO `session`(s_phpsid,s_data,s_start,s_update) VALUES('a20e36dd6654df5ea30ca626635fb141', 'a:0:{}', '2008-07-04 20:07:35', NOW())
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
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
Go to the top of the page
+Quote Post
Kicok
post
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
Go to the top of the page
+Quote Post
starach
post
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) ?
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
Ajdacho
post
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
Go to the top of the page
+Quote Post
Kicok
post
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 ;]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:40