Mysql - LOCK notwendig?
Jürgen
- datenbank
0 dedlfix
Guten Tag,
an einer Stelle meines PHP-Scriptes werden Daten direkt hintereinander in zwei Tabellen geschrieben:
INSERT INTO tabelle1 xxx
INSERT INTO tabelle2 xxx
In beiden Tabellen ist ein Auto-Increment gesetzt, der jedem Datensatz eine Id zuweist. Die IDs der hintereinander eingefügten Datensätze sollen gleich sein.
Nun habe ich mir überlegt, dass im ungünstigsten Fall Folgendes passieren kann:
Der erste Insert-Befehl wird von Benutzer A veranlasst, es wird die Id 5 vergeben.
Der erste Insert-Befehl wird von Benutzer B veranlasst, es wird die Id 6 vergeben.
Der zweite Insert-Befehl wird von Benutzer B veranlasst, es wird die Id 5 vergeben.
Der zweite Insert-Befehl wird von Benutzer A veranlasst, es wird die Id 6 vergeben.
Jetzt stimmen die Ids der beiden Benutzer A und B in den beiden Tabellen nicht mehr überein.
Nun meine Fragen:
Wie wahrscheinlich ist ein solches Szenario?
Reicht es aus, im zweiten Insert-Befehl und in der zweiten Tabelle auf Auto-Increment zu verzichten und so vorzugehen:
INSERT INTO tabelle2 (id) VALUES ('".mysql_insert_id($verbindungshandle)."')?
Kann ich auf LOCK verzichten? Wenn nicht, wo habe ich diese wie (READ, WRITE?) zu setzen?
Danke.
Jürgen
echo $begrüßung;
Wie wahrscheinlich ist ein solches Szenario?
Das ist irrelevant. Du kennst sicher die Story mit der Kuh und dem 1 Meter tiefen See.
Reicht es aus, im zweiten Insert-Befehl und in der zweiten Tabelle auf Auto-Increment zu verzichten und so vorzugehen:
INSERT INTO tabelle2 (id) VALUES ('".mysql_insert_id($verbindungshandle)."')?
Die MySQL-Funktion LAST_INSERT_ID() und deren Pendant in PHP mysql_insert_id() liefern die letzte automatisch eingefügte ID verbindungsabhängig zurück. Parallel laufende Prozesse mit eigener Verbindung beeinflussen das Rückgabeergebnis nicht. Damit solltest du ohne LOCK auskommen.
echo "$verabschiedung $name";