Heim >Datenbank >MySQL-Tutorial >Sperren der MySQL-Syntaxanalysetabelle
Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL, das hauptsächlich die relevante Syntaxanalyse zum Sperren von Tabellen vorstellt. MySQL ermöglicht es Client-Sitzungen, explizit Tabellensperren zu erwerben, um zu verhindern, dass andere Sitzungen innerhalb eines bestimmten Zeitraums darauf zugreifen Ich hoffe, dass sie für alle hilfreich ist.
Empfohlenes Lernen: MySQL-Video-Tutorial
Eine Sperre ist ein Flag, das einer Tabelle zugeordnet ist. MySQL ermöglicht Client-Sitzungen, explizit Tabellensperren zu erwerben, um zu verhindern, dass andere Sitzungen für einen bestimmten Zeitraum auf dieselbe Tabelle zugreifen. Eine Client-Sitzung kann Tabellensperren nur für sich selbst erwerben oder freigeben. Es kann keine Tabellensperren für andere Sitzungen erwerben oder freigeben.
CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, col INT NOT NULL, PRIMARY KEY (id)) Engine = InnoDB;
Die folgenden Anweisungen erfordern explizit eine Tabellensperre:
LOCK TABLES table_name [READ | WRITE]
Um eine Tabelle zu sperren, geben Sie ihren Namen nach dem Schlüsselwort LOCK TABLES an. Darüber hinaus können Sie die Art der Sperre angeben, die READ oder WRITE sein kann.
Um die Sperre für die Tabelle aufzuheben, verwenden Sie die folgende Anweisung:
UNLOCK TABLES;
READ-Sperre hat die folgenden Eigenschaften:
Beispiel:
Stellen Sie in der ersten Sitzung zunächst eine Verbindung zur mysqldemo-Datenbank her und rufen Sie die aktuelle Verbindungs-ID mit der Funktion CONNECTION_ID() ab, wie unten gezeigt:
SELECT CONNECTION_ID();
Fügen Sie dann eine neue in die Tabelle ein Tisch ok.
INSERT INTO tbl(col) VALUES(10);
Als nächstes fragen Sie die Daten in der TBL-Tabelle ab.
SELECT * FROM tbl;
Anschließend verwenden Sie die LOCK TABLE-Anweisung, um die Sperre zu erhalten.
LOCK TABLE tbl READ;
Wenn Sie schließlich innerhalb derselben Sitzung versuchen, eine neue Zeile in die TBL-Tabelle einzufügen, erhalten Sie eine Fehlermeldung.
INSERT INTO tbl(col) VALUES(11);
Sobald READ also die Sperre erhält, kann es in derselben Sitzung keine Daten mehr in die Tabelle schreiben.
Überprüfen Sie die Sperre aus einer anderen Sitzung.
Stellen Sie zunächst eine Verbindung zu mysqldemo her und überprüfen Sie die Verbindungs-ID:
SELECT CONNECTION_ID();
Rufen Sie dann die Daten aus der TBL-Tabelle ab:
SELECT * FROM tbl;
Als nächstes fügen Sie eine neue Zeile in die TBL-Tabelle ein:
INSERT INTO tbl(col) VALUES(20);
Aus der 2. Der Einfügevorgang jeder Sitzung befindet sich im Wartezustand, da die erste Sitzung READ die Sperre für die TBL-Tabelle erworben, sie aber noch nicht freigegeben hat.
Details können unter SHOW PROCESSLIST eingesehen werden.
SHOW PROCESSLIST;
Kehren Sie danach zur ersten Sitzung zurück und verwenden Sie die UNLOCK TABLES-Anweisung, um die Sperre aufzuheben. Nachdem READ die Sperre aus der ersten Sitzung aufhebt, führt INSERT den Vorgang in der zweiten Sitzung aus.
unlock tables;
Überprüfen Sie abschließend die Daten der TBL-Tabelle, um zu sehen, ob die INSERT-Operation der zweiten Sitzung tatsächlich ausgeführt wird.
SELECT * FROM tbl;
WRITE Lock hat die folgenden Eigenschaften:
Zuerst erhält WRITE die Sperre aus der ersten Sitzung.
LOCK TABLE tbl WRITE;
Dann funktioniert das Einfügen einer neuen Zeile in die TBL-Tabelle
INSERT INTO tbl(col) VALUES(11);
.
Als nächstes lesen Sie Daten aus der TBL-Tabelle.
SELECT * FROM tbl;
Es funktioniert auch.
Versuchen Sie anschließend ab der zweiten Sitzung, Daten zu schreiben und zu lesen:
INSERT INTO tbl(col) VALUES(21); SELECT * FROM tbl;
最后,从第一个会话中释放锁定。
UNLOCK TABLES;
看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
推荐学习:mysql视频教程
Das obige ist der detaillierte Inhalt vonSperren der MySQL-Syntaxanalysetabelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!