| 

.NET C# Java Javascript Exception

4
Ich stelle mich gerade der Frage, ob das Folgende technisch möglich wäre:

Eine MySQL Datenbank beinhaltet z. B. Userdaten, wovon die user-id unique und auto_increment eingestellt ist. Die zuletzt erstellte user-id ist sagen wir mal "10".

Bei einem nächsten INSERT würde dann entsprechend die user-id "11" folgen.

Jetzt zu meiner Frage:
Wäre es technisch möglich, dass 2 INSERT's gleichzeitig ausgeführt werden und es so zu einem Datenbank-Fehler kommt, da bei beiden INSERT's versucht wird die user-id "11" anzulegen?
Wenn sich z. B. 2 Besucher gleichzeitig auf die Millisekunde genau registrieren?

Oder arbeitet die MySQL-Datenbank die Anfragen der Besucher nacheinander ab?
News:
16.03.2012
chrispo 275 7
1 Antwort
1
Das dürfte vom Tabellentyp abhängig sein. MyISAM setzt einen Table-Lock beim Update, daher sind auto-Increments etc. immer atomar. Zu dem von dir beschriebenen Fehler kann es also nicht kommen. Siehe auch die Doku:
Table locking enables many sessions to read from a table at the same time, but if a session wants to write to a table, it must first get exclusive access. During the update, all other sessions that want to access this particular table must wait until the update is done.
16.03.2012
puls200 3,8k 7
Danke für die schnelle Antwort. Ich habe aufgrund deines Stichwortes "Table locking" mal recherchiert und gelesen, dass bei InnoDB dieses "Feature" auch gegeben ist und sogar im Vergleich zu MyISAM nicht die ganze Tabelle blockiert sondern nur die jeweilige Zeile welche bearbeitet wird. Ist das soweit richtig?
chrispo 16.03.2012
1
Hier kann man's nachlesen: http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html
Interessant der erste Kommentar: Damit das Record-Lock funktioniert, muss die Spalte der "WHERE"-Bedingung einen Index haben!
puls200 16.03.2012

Stelle deine Php-Frage jetzt!