2016-07-23 11 views
2

Ich habe 3 Tisch - TB1, TB2 und r_tb1_tb2 (InnoDB)Concurrent Einsätze in mySQL

TB1 Halten Sie die Details der Benutzer
(wird eingefügt) - id (primär, unique)
- nennen

Hält

TB2 die Details des Kurses die Benutzer ausführen können (statische Tabelle)
- id (primär, unique)
- Name des Kurses

r_tb1_tb2 halten die relati auf zwischen 2 Tabellen
- rid
- User_id (aus Tabelle 1)
- course_id (Verweise auf Tabelle 2)

Wenn ich eine neue Zeile in TB1 einzufügen, habe ich die ID der letzte eingefügte Zeile . Und damit eine weitere Zeile in r_tb1_tb2 einfügen

Ich kann vorhersehen, dass dies zu fehlerhaften Einträgen bei simultanen Instanzen von Einfügungen in tb1 führen kann.

Kann jemand bitte auf die Best Practices für solche gleichzeitige Updates verweisen.

Vielen Dank im Voraus.

Antwort

1

LAST_INSERT_ID Rückgabewert nach dem Benutzer:

enter image description here

+0

Danke @charif. Also muss ich mir keine Sorgen machen. Vielen Dank für Ihre Hilfe. – rookie

+0

wie Sie sehen können^_- – Cherif

+1

, aber in anderen Situationen wie diese Transaktionen verwenden, um Ihre Daten zu schützen – Cherif

3

last_insert_id hat für diese

in Schutz eingebaut

Die ID, die erzeugt wurde, wird in dem Server auf der Basispro Verbindung gehalten. Dies bedeutet, dass der von der Funktion auf einen gegebenen Client zurückgegebene Wert ist der erste Wert AUTO_INCREMENT für letzte Anweisung erzeugte eine AUTO_INCREMENT Spalte von diesem Client beeinflussen. Dieser Wert kann nicht von anderen Clients beeinflusst werden, auch wenn sie eigene AUTO_INCREMENT-Werte generieren. Dieses Verhalten stellt sicher, dass jeder Client seine eigene ID abrufen kann, ohne sich um die Aktivität anderer Clients und ohne die Notwendigkeit für Sperren oder Transaktionen zu kümmern.

(Schwerpunkt ihres)

Wenn also zwei verschiedene Benutzer Aktion auf Ihrer Website einnehmen, die in Aufzeichnungen führen in T1 eingefügt werden, wobei die last_insert_id s für die Benutzer werden anders sein, weil sie zwei verschiedene Verbindungen verwenden (Clients im Conext oben)

+0

Thanks @ e4c5 (gut es ist ein kluger Schachzug :-)) Es war eine sehr deutliche Antwort. Ich muss mir jetzt keine Sorgen machen. – rookie

+0

froh, geholfen zu haben – e4c5