AUTO_INCREMENT und last_insert_id() sicher?
am 06.05.2005 20:30:10 von Georg Howen
Hallo,
ich habe in dem PHP-Buch von Schlossnagle ein DB-Beispiel gefunden, was mich
etwas stutzen lässt (ansonsten geniales Buch).
Szenario:
Es gibt eine Tabelle mit einer Spalte (id) als AUTO_INCREMENT.
Es erfolgt ein INSERT-Befehl mit Inhalt der Felder ausser ID.
Direkt im Anschluss wird über last_insert_id() der Wert von id ausgelesen
(und einem Objekt als sein id-Wert zugewiesen)
Jetzt frage ich mich was passiert, wenn nach dem INSERT von Benutzer1 ein
INSERT von Benutzer2 erfolgt, bevor Benutzer1 über last_insert_id() seine id
ausgelesen hat.
Eigentlich müssten doch dann Benutzer1 und Benutzer2 den selben ID-Wert
zurückbekommen (was nicht wünschenswert wäre), oder? Falls ja, gibt es da
ein besseres Design?
Danke für Erleuchtungen,
Georg
Re: AUTO_INCREMENT und last_insert_id() sicher?
am 06.05.2005 21:19:07 von Matthias Esken
On Fri, 6 May 2005 20:30:10 +0200, Georg Howen wrote:
> Es gibt eine Tabelle mit einer Spalte (id) als AUTO_INCREMENT.
> Es erfolgt ein INSERT-Befehl mit Inhalt der Felder ausser ID.
> Direkt im Anschluss wird über last_insert_id() der Wert von id ausgelesen
> (und einem Objekt als sein id-Wert zugewiesen)
>
> Jetzt frage ich mich was passiert, wenn nach dem INSERT von Benutzer1 ein
> INSERT von Benutzer2 erfolgt, bevor Benutzer1 über last_insert_id() seine id
> ausgelesen hat.
>
> Eigentlich müssten doch dann Benutzer1 und Benutzer2 den selben ID-Wert
> zurückbekommen (was nicht wünschenswert wäre), oder?
Nein, das müssten sie nicht und das bekommen sie natürlich auch nicht.
Durch jedes INSERT wird der Wert des Autoincrement-Feldes hochgezählt. Das
Auslesen durch einen Client spielt dort überhaupt keine Rolle.
Falls du dir jetzt Sorgen machst, ob man denn dann via last_insert_id()
überhaupt immer die richtige ID zum eigenen Datensatz bekommt, so kann ich
dich auch da beruhigen. Diese Funktion bezieht sich auf die jeweilige
Verbindung zur DB. Benutzer 1 bekommt also garantiert nicht die ID, die das
Autoincrement des Statements von Benutzer 2 erzeugt hat, sondern seine
eigene.
Gruß,
Matthias
Re: AUTO_INCREMENT und last_insert_id() sicher?
am 06.05.2005 21:32:38 von Marian Heddesheimer
On Fri, 6 May 2005 20:30:10 +0200, Georg Howen wrote:
>Jetzt frage ich mich was passiert, wenn nach dem INSERT von Benutzer1 ein
>INSERT von Benutzer2 erfolgt, bevor Benutzer1 über last_insert_id() seine id
>ausgelesen hat.
ein Beispiel, wie du sowas selbst testen kannst, findest du hier:
http://www.heddesheimer.de/coaching/mysql_multiuser.html
Gruß
Marian
--
Online Lernen (auch fuer Blinde geeignet): HTML, PHP, MySQL, Word
http://www.lernpilot.de/wbt/