Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL auto_incrementin seuraava arvo

t0ll0 [18.08.2010 19:12:04]

#

Tervehdys!

Ongelmani koskee mysqlin auto_increment arvoa.
Käytän sitä rivien id sarakkeessa ja olisi tarvetta saada selville
uuden rivin tuleva arvo mitä ollaan vasta lisäämässä.

Olen miettinyt ratkaisua mm. siten että hakisi id-kentän suurimman arvon
ja lisäisi siihen yhden mutta tämähän ei toimisi oikein mikäli viimeisin rivi olisi poistettu.

Googlettelulla olen saanut vain pääni kipeäksi joten käännyimpä taas
ohjelmointiputkan asiantuntevan porukan apuun!

Onko tähän olemassa jo valmista funktiota vai mikä olisi luotettava ratkaisu?

Kiittäen
-t0ll0

siirappi [18.08.2010 19:15:09]

#

http://www.dbforums.com/php/1627763-how-get-next-auto-increment-value.html#post6323947

Teuro [18.08.2010 19:16:55]

#

Kerrotko vielä, miksi kyseinen arvo tarpeen ennen suoritusta? Saat sen selville tietty hakemalla SELECT MAX(id) FROM taulu; ja lisäämällä tähän numeron 1. Kyselyn ajon jälkeen id on selvillä mysql_insert_id() funktiolla.

Metabolix [18.08.2010 19:23:20]

#

Ajatuksessasi on yksi vakava virhe. Kuvitellaanpa seuraavaa tilannetta, jossa käyttäjät A ja B käsittelevät tietokantaa samaan aikaan:

A selvittää uuden id:n, 123.
B selvittää uuden id:n, 123.
B lisää kantaan rivin, id:ksi tulee 123.
A lisää kantaan rivin, id:ksi tulee 124.

Huomannet ongelman. Tämän takia uusi id pitää selvittää aina vasta lisäyksen jälkeen (esim. funktiolla mysql_insert_id).

t0ll0 [18.08.2010 19:40:45]

#

Metabolix

Tuota ongelmaa olin kyllä myös miettinyt, mutta jostain syystä ei ollut ajatuksissani kirjoittaessani viestiä!

Tutkin tuota mysql_insert_id funktiota.
Kiitoksia vastanneille!

---
Loistavaa!
mysql_insert_id toimii mainiosti koodissani.
Kiitoksia vielä kerran.

-t0ll0

punppis [19.08.2010 01:29:08]

#

Toimiiko mysql_insert_id jos joku onnistuu välissä tekemään tietokantakyselyn:

A lisää tietokantaan jotain
B lisää tietokantaan jotain
A pyytää viimeisimmän id:n, joka on B:n lisäämä, eli väärä

Tähän on toki aika olemattomat mahdollisuudet, koska tuo funktio pitäisi suorittaa heti tietokantakyselyn jälkeen.

Metabolix [19.08.2010 05:01:19]

#

punppis kirjoitti:

Toimiiko mysql_insert_id jos joku onnistuu välissä tekemään tietokantakyselyn?

Mitään ongelmaa ei ole, koska mysql_insert_id palauttaa nimenomaan kyseisellä tietokantayhteydellä (mysql_connect jne.) lisätyn rivin id:n.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta