Wird UPDATE gesperrt? Wird die SQL-Anweisung gesperrt, wenn sie wie folgt lautet? UPDATE Tabelle1 SET Num = Num + 1 WHERE id=1; Die Antwort ist nein Tatsächlich unterstützt MySQL das Sperren von Datenzeilen (InnoDB) und fügt während UPDATE/DELETE-Vorgängen automatisch exklusive Sperren hinzu. Allerdings werden nicht alle Sperren angewendet, solange ein UPDATE-Schlüsselwort vorhanden ist . Für die obige MySQL-Anweisung ist es nicht nur eine UPDATE-Anweisung, sondern sollte zwei SQL-Anweisungen ähneln (Pseudocode): a = AUSWÄHLEN * AUS Tabelle1 WO id=1; UPDATE Tabelle1 SET Num = a.num + 1 WHERE id=1; Beim Ausführen einer SELECT-Anweisung erfolgt keine Sperre, nur beim Ausführen eines UPDATE wird eine Sperre vorgenommen. Daher kommt es bei gleichzeitigen Vorgängen zu inkonsistenten Aktualisierungsdaten. Ist die Ursache gefunden, ist die Lösung des Problems nicht mehr weit. Es gibt zwei Möglichkeiten, diese Art von Problem zu lösen:
SELECT explizit Es gibt zwei Möglichkeiten, SELECT zu sperren: SELECT ... LOCK IN SHARE MODE #Gemeinsame Sperre, andere Transaktionen können lesen, aber nicht aktualisieren SELECT ... FOR UPDATE #Exklusive Sperre, andere Transaktionen können weder lesen noch schreiben Wenn Sie diese beiden Anweisungen nicht verwenden, wird die SELECT-Anweisung standardmäßig nicht gesperrt. Und für die oben genannten Szenarien müssen exklusive Sperren verwendet werden. Darüber hinaus sind die beiden oben genannten Aussagen nur innerhalb einer Transaktion wirksam, da sie sonst keine Wirkung entfalten. So verwenden Sie Transaktionen in der MySQL-Befehlszeile: AUTOCOMMIT SETZEN=0; MIT DER ARBEIT BEGINNEN; a = SELECT num FROM table1 WHERE id=2 FOR UPDATE; UPDATE Tabelle1 SET Num = a.num + 1 WHERE id=2; ARBEIT VERPFLICHTEN; Auf diese Weise verwenden Sie bei zukünftigen Datenaktualisierungen diese Transaktion zum Ausführen des Vorgangs. Im Falle einer Parallelität wird die später ausgeführte Transaktion blockiert, bis die aktuelle Transaktion abgeschlossen ist. (Parallelität wird durch Sperren in sequentielle Ausführung geändert) Verwenden optimistischer Sperren Optimistisches Sperren ist ein Mechanismus zur Sperrimplementierung, der naiv davon ausgeht, dass bei allen zu ändernden Daten keine Konflikte auftreten. Daher werden die Daten vor der Aktualisierung nicht gesperrt, sondern es wird nur die Versionsnummer der Datenzeile abgefragt (die Versionsnummer ist hier ein benutzerdefiniertes Feld, für das basierend auf der Geschäftstabelle ein zusätzliches Feld hinzugefügt werden muss, und es wird bei jeder Aktualisierung automatisch erhöht oder aktualisiert). Bei einer Datenaktualisierung werden den Aktualisierungsbedingungen Informationen zur Versionsnummer hinzugefügt.
üben Üben Sie die Updatesperre einmal an einer Schülertabelle, die eine Datenmenge enthält. Öffnen Sie zwei Clients Ausgeführt nach der ersten offenen Transaktion Wählen Sie zum Aktualisieren den Namen des Studenten mit der ID = 1 aus. Nachdem die zweite Transaktion geöffnet wurde, wird dieselbe Anweisung ausgeführt und es wird festgestellt, dass die Daten durch die erste Transaktion blockiert sind. Zu diesem Zeitpunkt führt die erste Transaktion die Änderung aus und führt ein Commit durch. Die ausgewählte Ausführung der zweiten Transaktion war länger als 4 Sekunden blockiert Zusammenfassung Im Allgemeinen können beide Methoden gleichzeitige Aktualisierungsvorgänge an der Datenbank unterstützen. Welche Methode verwendet wird, hängt jedoch vom tatsächlichen Anwendungsszenario ab und davon, welche Methode das Anwendungsszenario besser unterstützt und die geringsten Auswirkungen auf die Leistung hat. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Zabbix3.4-Methode zum Überwachen des MongoDB-Datenbankstatus
>>: Routing-Wiederverwendungsfunktion für mehrere Tabs der Ant Design Blazor-Komponentenbibliothek
Im Gegensatz zu anderen Designarten verändert sich...
In MySQL gibt es folgende Protokolldateien: 1: Pr...
Inhaltsverzeichnis Vorwort 1. Die Bedeutung der K...
Der zu erzielende Effekt ist: Festes Vergrößern a...
Der standardmäßige Bildlaufleistenstil in Windows...
In diesem Artikel wird die Zusammensetzung der Ha...
Mixin-Methode: Der Browser kann nicht kompilieren...
Ich habe viele Tutorials gelesen, aber festgestel...
Im vorherigen Artikel wurde der Docker-Dienst ins...
1 Was ist MVCC Der vollständige Name von MVCC lau...
Inhaltsverzeichnis 1. Implementierung des Zählers...
Wirkung der Operation html <Kopf> <meta ...
CSS Houdini gilt als die aufregendste Innovation ...
<br />Vor Kurzem hat UCDChina eine Artikelse...
Inhaltsverzeichnis Vorwort Aktiver Rückzug Ausnah...