[ batalule @ 15.12.2004. 09:09 ] @
Imam neku tabelu u koju radim INSERT. Imam polje `Id` koje je UNIQUE Autoincrement i u njega ne upisujem vrednost vec to uradi sam MySQL. Medjutim sada mi treba vrednost tog polja nakon sto uradim INSERT. Jel ima neka fja u MySQL koja ce mi dati vrednost poslednjeg upisanog Id-ja?
thx
[ Mihailo @ 15.12.2004. 10:43 ] @
SELECT MAX(id) from ime_tabele;
[ broker @ 15.12.2004. 11:09 ] @
MySQL ima SQL funkciju LAST_INSERT_ID() koju mozes korsititi u sledecim SQL komandma. Detalje imas u uputstvu.
[ Damjan S. Vujnovic @ 15.12.2004. 11:11 ] @
Koristi LAST_INSERT_ID(), max(id) je sporije i (moze da) ne radi u slucaju da postoji vise istovremenih konekcija.

D.
[ Mihailo @ 15.12.2004. 11:27 ] @
Ok, možda je brže LAST_INSERT_ID, iako mislim da je sigurnije SELECT(MAX) u ovom slučaju. Sećam se da je LAST_INSRT_ID imao čudne tripove kada se obriše poslednji red, no možda je to sada isrpavljeno. Ali odakle ti ideja da SELECT(MAX) neće raditi kada ima više konekcija?
[ Damjan S. Vujnovic @ 15.12.2004. 11:38 ] @
Jedini nacin da se to natera da radi ispravno u slucaju vise simultanih konekcija je da se koriste transakcije, sto znaci koriscenje tabela koje podrzavaju transakcije (InnoDB), sto znaci pefrofmance issue. Sa druge strane LAST_INSERT_ID() radi ispravno za bilo koji tip tabela (pa i za one "brze" kao sto je MyISAM) i u slucaju vise simultanih konekcija.

Btw, argument sa brisanjem poslednjeg reda ne stoji (mada je LAST_INSERT_ID() oduvek ispravno radilo tacno ono sto pise u dokumentaciji) posto je OP pitao kako da dodje do vrednosti autoincrement polja torke koju je neposredno pre toga insertovao.

D.
[ Dejan Topalovic @ 15.12.2004. 16:09 ] @
Citat:
Mihailo:  Ali odakle ti ideja da SELECT(MAX) neće raditi kada ima više konekcija?
vjerovatno je mislio na situaciju kad imas vise istovremenih konekcija i insertovanja u tabelu, pa onaj ko zeli da sazna last inserted id dobije MAX(id) od nekog drugog korisnika, koji je 0.001 sekundu kasnije insertovao nesto.