Maison > Article > base de données > Verrouillage de la table d'analyse syntaxique MySQL
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.
Apprentissage recommandé : Tutoriel vidéo 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;
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 a les caractéristiques suivantes :
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();
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;
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);
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();
Ensuite, récupérez les données de la table tbl :
SELECT * FROM tbl;
Ensuite, insérez une nouvelle ligne dans la table tbl :
INSERT INTO tbl(col) VALUES(20);
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;
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;
Le verrou WRITE a les caractéristiques suivantes :
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;
Ç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;
最后,从第一个会话中释放锁定。
UNLOCK TABLES;
看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
推荐学习: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!