Heim >Datenbank >MySQL-Tutorial >Sperren der MySQL-Syntaxanalysetabelle

Sperren der MySQL-Syntaxanalysetabelle

WBOY
WBOYnach vorne
2022-06-14 12:06:361883Durchsuche

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.

Sperren der MySQL-Syntaxanalysetabelle

Empfohlenes Lernen: MySQL-Video-Tutorial

MySQL-Tabellensperre

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;

LOCK- und UNLOCK TABLES-Syntax

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;

Lesesperre

READ-Sperre hat die folgenden Eigenschaften:

  1. READ kann die Sperre für die Tabelle gleichzeitig über mehrere Sitzungen erwerben. Darüber hinaus können andere Sitzungen Daten aus der Tabelle lesen, ohne eine Sperre zu erwerben.
  2. Eine Sitzung mit einer READ-Sperre kann nur Daten in der Tabelle lesen, aber nicht schreiben. Darüber hinaus können andere Sitzungen keine Daten in die Tabelle schreiben, bis READ die Sperre aufhebt. Schreibvorgänge aus einer anderen Sitzung gehen in einen Wartezustand über, bis die READ-Sperre aufgehoben wird.
  3. MySQL gibt implizit alle Sperren frei, wenn die Sitzung normal oder abnormal beendet wird. Diese Funktion hängt auch mit der Schreibsperre zusammen.

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();

Sperren der MySQL-Syntaxanalysetabelle
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;

Sperren der MySQL-Syntaxanalysetabelle
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);

Sperren der MySQL-Syntaxanalysetabelle
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();

Sperren der MySQL-Syntaxanalysetabelle
Rufen Sie dann die Daten aus der TBL-Tabelle ab:

SELECT * FROM tbl;

Sperren der MySQL-Syntaxanalysetabelle
Als nächstes fügen Sie eine neue Zeile in die TBL-Tabelle ein:

INSERT INTO tbl(col) VALUES(20);

Sperren der MySQL-Syntaxanalysetabelle
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;

Sperren der MySQL-Syntaxanalysetabelle
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;

Sperren der MySQL-Syntaxanalysetabelle

WRITE LOCK

WRITE Lock hat die folgenden Eigenschaften:

  1. Die einzige Sitzung, die die Tabellensperre hält, kann Daten aus der Tabelle lesen und schreiben.
  2. Andere Sitzungen können keine Daten aus der Tabelle lesen und Daten in die Tabelle schreiben, bis die WRITE-Sperre aufgehoben wird.

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;

Sperren der MySQL-Syntaxanalysetabelle

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;

Sperren der MySQL-Syntaxanalysetabelle
Sperren der MySQL-Syntaxanalysetabelle

最后,从第一个会话中释放锁定。

UNLOCK TABLES;

看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
Sperren der MySQL-Syntaxanalysetabelle

读锁与写锁

  1. 读锁是“共享”锁,它可以防止正在获取写锁,但不能锁定其他读锁。
  2. 写锁是“独占”锁,可以防止任何其他类型的锁。

推荐学习: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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen