Heim  >  Artikel  >  Warum ist die Tabelle in MYSQL gesperrt?

Warum ist die Tabelle in MYSQL gesperrt?

百草
百草Original
2023-07-10 13:55:344422Durchsuche

Die Gründe, warum MySQL-Tabellen gesperrt sind: 1. Bei der Transaktionsverarbeitung handelt es sich um eine Reihe von SQL-Anweisungen, die ausgeführt werden müssen oder überhaupt nicht ausgeführt werden müssen. Wenn eine Transaktion mehrere SQL-Anweisungen enthält, die dieselbe Tabelle ändern, wird die Tabelle gesperrt 2. Indexvorgang: Wenn Sie einen Index für eine Tabelle erstellen oder löschen, wird die Tabelle gesperrt. 3. Gleichzeitiger Vorgang: Wenn Sie eine große Datenmenge in eine Tabelle einfügen und versuchen, einen Abfragevorgang durchzuführen, wird die Tabelle gesperrt Gesperrt und so weiter.

Warum ist die Tabelle in MYSQL gesperrt?

Das Betriebssystem dieses Tutorials: Windows 10-System, MySQL-Version 8.0, Dell G3-Computer.

MySQL ist ein relationales Open-Source-Datenbankverwaltungssystem und eine der am weitesten verbreiteten Datenbanken. Bei der Verwendung von MySQL kommt es häufig zu Situationen, in denen Tabellen gesperrt sind. Es gibt viele Gründe, warum ein Tisch gesperrt ist. Hier sind einige häufige Gründe.

1. Transaktionsverarbeitung

Eine Transaktion bezieht sich auf eine Reihe von SQL-Anweisungen, die entweder alle ausgeführt werden oder nicht. Wenn eine Transaktion mehrere SQL-Anweisungen enthält, die dieselbe Tabelle ändern, wird diese Tabelle gesperrt. Dies liegt daran, dass MySQL einen Zeilensperrmechanismus verwendet. Wenn zwei oder mehr Transaktionen gleichzeitig eine Tabelle ändern, stellt MySQL die Änderungsanforderung einer der Transaktionen in die Warteschlange, bis die Tabelle entsperrt wird.

2. Indexvorgang

Das Ausführen eines Indexvorgangs für eine Tabelle führt auch dazu, dass die Tabelle gesperrt wird. Wenn wir beispielsweise einen neuen Index erstellen oder einen Index für eine große Tabelle löschen, wird die Tabelle zu diesem Zeitpunkt gesperrt. Die Zeit, die ein Indexvorgang zum Sperren einer Tabelle benötigt, hängt von der Größe und Struktur der Tabelle ab.

3. Gleichzeitige Vorgänge

In MySQL führen gleichzeitige Vorgänge dazu, dass die Tabelle gesperrt wird. Wenn Sie beispielsweise eine große Datenmenge in eine Tabelle einfügen und gleichzeitig versuchen, Abfragevorgänge auszuführen, wird die Tabelle gesperrt. Dies liegt daran, dass in MySQL eine Abfrageanweisung zuerst die Lesesperre der Tabelle erhalten muss, bevor sie eine Abfrageoperation ausführt, und die Einfügeanweisung zuerst die Schreibsperre der Tabelle erhalten muss, bevor sie eine Dateneinfügungsoperation ausführt.

4. Sperrvorgang

In MySQL führen Sperrvorgänge auch dazu, dass die Tabelle gesperrt wird. Wenn Sie beispielsweise die SELECT ... FOR UPDATE-Anweisung verwenden, um eine Sperroperation auf Zeilenebene durchzuführen, fügt MySQL der Zeile eine Schreibsperre hinzu, wodurch die gesamte Tabelle gesperrt wird. Zu diesem Zeitpunkt müssen andere Vorgänge warten, bis die Sperre aufgehoben wird, bevor sie fortfahren können.

Zusammenfassend lässt sich sagen, dass das Sperren von Tabellen eines der häufig auftretenden Probleme in MySQL ist. Wir müssen verschiedene Sperrtypen und ihre Ursachen verstehen, um eine Sperrung der Tabelle so weit wie möglich zu vermeiden und die Parallelität des Systems zu verbessern.

MySQL unterstützt mehrere Arten von Tabellensperren, einschließlich gemeinsamer Sperren (S-Sperren) und exklusiver Sperren (X-Sperren). Durch gemeinsame Sperren können mehrere Transaktionen gleichzeitig auf die Tabelle zugreifen, die Daten können jedoch nicht geändert werden. Eine exklusive Sperre verhindert, dass andere Transaktionen auf die Tabelle zugreifen, bis die Sperre aufgehoben wird.

Normalerweise sperrt MySQL die Tabelle, wenn die folgenden Vorgänge ausgeführt werden:

Beim Abfragen von Daten mit der Anweisung SELECT … FOR UPDATE oder SELECT … LOCK IN SHARE MODE.

Bei Verwendung von INSERT-, UPDATE- oder DELETE-Anweisungen zum Ändern von Daten.

Bei Verwendung der ALTER TABLE-Anweisung zum Ändern der Tabellenstruktur.

Bei Verwendung der TRUNCATE TABLE-Anweisung zum Löschen von Tabellendaten.

Darüber hinaus unterstützt MySQL auch manuelle Sperren. Sie können die Funktionen GET_LOCK() und RELEASE_LOCK() verwenden, um Tabellensperren zu erhalten und freizugeben.

Zu den gängigen Tabellensperrstrategien gehören:

Zeilensperre: Beim Ändern von Zeilendaten sperren und bestimmte Zeilen sperren.

Seitensperre: Beim Ändern von Seitendaten sperren und eine bestimmte Seite sperren.

Tischschloss: in Reparatur

Das obige ist der detaillierte Inhalt vonWarum ist die Tabelle in MYSQL gesperrt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn