MySql auto increment wert

Thomasio

Erfahrenes Mitglied
Ich habe eine MySql Tabelle, deren Primärschlüssel via auto increment erhöht wird.
Wenn ich nun mache

INSERT INTO `tabelle` .....

dann gebe ich den Primärschlüssel nicht an, also vergibt MySql ihn automatisch.
PHPMyAdmin zeigt ja immer an, welcher auto increment Wert der Nächste sein wird.
Mein Problem ist aber, dass vorher - nachher nicht verlässlich ist.

Wenn mehrere User gleichzeitig auf die Tabelle zugreifen, könnte zwischen auto increment Wert lesen und insert schon ein weiterer neuer insert dazu gekommen sein, ich brauche aber verlässlich den Wert den DIESER insert bekommen hat.

Kann man das irgendwie lösen?
 
Du kannst auch die ID "reserverieren", indem Du einen INSERT durchführst, die zurückgegebene ID verwendest und später dann einen UPDATE auf diese ID durchführst - ist etwas umständlich aber so können mehrere User auf die Tabelle zugreifen ohne dass Du mit Locks arbeitest.
 
OhOh, ich hätte vielleicht dazu sagen sollen, dass ich nicht wirklich ein Experte bin.

1) Tabelle sperren heisst was?
Angenommen 2 User versuchen gleichzeitig einen insert.
Der Erste sperrt die Tabelle, bekommt seinen insert, so weit ok, aber was ist mit dem Zweiten?
Der muss ja auch seinen insert bekommen, sprich warten bis der Erste fertig ist, Error - Access denied oder sowas hilft nicht.

2) Woher bekomme ich die zurückgegebene ID?
Ob ich nun einen leeren Eintrag "reserviere" und den dann update, oder gleich den richtigen Eintrag mache ist doch egal, ich brauche in beiden Fällen die "zurückgegebene" ID, nur woher nehme ich die?
 
Lock Tables.

Wenn der User fertig ist mit seinem Insert Query und du die Id geholt hast kann
der Zweite erst nach dem die id geholt wurde seinen Insert Befehl ausführen.
 
Zurück