Maison  >  Article  >  base de données  >  Verrouillage de la table d'analyse syntaxique MySQL

Verrouillage de la table d'analyse syntaxique MySQL

WBOY
WBOYavant
2022-06-14 12:06:361861parcourir

Cet article vous apporte des connaissances pertinentes sur mysql, qui présente principalement l'analyse syntaxique pertinente sur le verrouillage de table. MySQL permet aux sessions client d'acquérir explicitement des verrous de table pour empêcher d'autres sessions d'y accéder dans un laps de temps spécifique. le même tableau ci-dessous. J’espère qu’il sera utile à tout le monde.

Verrouillage de la table d'analyse syntaxique MySQL

Apprentissage recommandé : Tutoriel vidéo mysql

Verrouillage de table MySQL

Un verrou est un indicateur associé à une table. MySQL permet aux sessions client d'acquérir explicitement des verrous de table pour empêcher d'autres sessions d'accéder à la même table pendant une période de temps spécifique. Une session client ne peut acquérir ou libérer des verrous de table que pour elle-même. Il ne peut pas acquérir ou libérer des verrous de table pour d'autres sessions.

CREATE TABLE tbl (
  id INT NOT NULL AUTO_INCREMENT,
  col INT NOT NULL,
  PRIMARY KEY (id)) Engine = InnoDB;

Syntaxe LOCK et UNLOCK TABLES

Les instructions suivantes acquièrent explicitement un verrou de table :

LOCK TABLES table_name [READ | WRITE]

Pour verrouiller une table, spécifiez son nom après le mot-clé LOCK TABLES. De plus, vous pouvez spécifier le type de verrouillage, qui peut être READ ou WRITE.

Pour libérer le verrou sur la table, utilisez l'instruction suivante :

UNLOCK TABLES;

Le verrou Read

Le verrou READ a les caractéristiques suivantes :

  1. READ peut acquérir le verrou sur la table simultanément via plusieurs sessions. De plus, d'autres sessions peuvent lire les données de la table sans acquérir de verrou.
  2. Une session détenant un verrou READ peut uniquement lire les données de la table, mais ne peut pas écrire. De plus, les autres sessions ne peuvent pas écrire de données dans la table tant que READ n'a pas libéré le verrou. Les opérations d'écriture d'une autre session entreront dans un état d'attente jusqu'à ce que le verrou READ soit libéré.
  3. MySQL libérera implicitement tous les verrous si la session se termine normalement ou anormalement. Cette fonctionnalité est également liée au verrouillage WRITE.

Exemple :
Dans la première session, connectez-vous d'abord à la base de données mysqldemo et obtenez l'ID de connexion actuel à l'aide de la fonction CONNECTION_ID() comme indiqué ci-dessous :

SELECT CONNECTION_ID();

Verrouillage de la table danalyse syntaxique MySQL
Ensuite, insérez-en un nouveau dans le tbl tableau OK.

INSERT INTO tbl(col) VALUES(10);

Ensuite, interrogez les données dans la table tbl.

SELECT * FROM tbl;

Verrouillage de la table danalyse syntaxique MySQL
Ensuite, pour obtenir le verrou, utilisez l'instruction LOCK TABLE.

LOCK TABLE tbl READ;

Enfin, au sein d'une même session, si vous essayez d'insérer une nouvelle ligne dans la table tbl, vous obtiendrez un message d'erreur.

INSERT INTO tbl(col) VALUES(11);

Verrouillage de la table danalyse syntaxique MySQL
Ainsi, une fois que READ acquiert le verrou, il ne peut pas écrire de données dans la table au cours de la même session.

Vérifiez le verrouillage d'une autre session.
Tout d'abord, connectez-vous à mysqldemo et vérifiez l'ID de connexion :

SELECT CONNECTION_ID();

Verrouillage de la table danalyse syntaxique MySQL
Ensuite, récupérez les données de la table tbl :

SELECT * FROM tbl;

Verrouillage de la table danalyse syntaxique MySQL
Ensuite, insérez une nouvelle ligne dans la table tbl :

INSERT INTO tbl(col) VALUES(20);

Verrouillage de la table danalyse syntaxique MySQL
From the deuxième L'opération d'insertion de chaque session est en attente car la première session READ a acquis le verrou sur la table tbl mais ne l'a pas encore libéré.

Les détails peuvent être consultés depuis SHOW PROCESSLIST.

SHOW PROCESSLIST;

Verrouillage de la table danalyse syntaxique MySQL
Après cela, revenez à la première session et utilisez l'instruction UNLOCK TABLES pour libérer le verrou. Une fois que READ a libéré le verrou de la première session, INSERT effectue l'opération dans la deuxième session.

unlock tables;

Enfin, vérifiez les données de la table tbl pour voir si l'opération INSERT de la deuxième session est réellement exécutée.

SELECT * FROM tbl;

Verrouillage de la table danalyse syntaxique MySQL

WRITE LOCK

Le verrou WRITE a les caractéristiques suivantes :

  1. La seule session détenant le verrou de la table peut lire et écrire des données de la table.
  2. Les autres sessions ne peuvent pas lire et écrire des données dans la table tant que le verrou WRITE n'est pas libéré.

Tout d'abord, WRITE obtient le verrou dès la première session.

LOCK TABLE tbl WRITE;

Ensuite, l'insertion d'une nouvelle ligne dans la table tbl

INSERT INTO tbl(col) VALUES(11);

fonctionne.

Ensuite, lisez les données de la table tbl.

SELECT * FROM tbl;

Verrouillage de la table danalyse syntaxique MySQL

Ça marche aussi.

Ensuite, à partir de la deuxième séance, essayez d'écrire et de lire des données :

INSERT INTO tbl(col) VALUES(21);
 SELECT * FROM tbl;

Verrouillage de la table danalyse syntaxique MySQL
Verrouillage de la table danalyse syntaxique MySQL

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

UNLOCK TABLES;

看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
Verrouillage de la table danalyse syntaxique MySQL

读锁与写锁

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

推荐学习:mysql视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer