Question Comment impliquer le verrou WRITE sur toutes les tables de MySql?


Comment impliquer le verrou WRITE sur toutes les tables de MySql? J'ai essayé ce qui suit mais ça donne une erreur.

FLUSH TABLES mytest.mytable1 WITH  LOCK;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near 'WITH  LOCK' at line 1

4
2018-05-31 07:49


origine




Réponses:


Qu'est-ce que vous essayez de faire ici? Les verrous dans MySQL peuvent être un peu déroutants si vous faites des suppositions sur ce que vous pensez qu'ils font.

  • UNE LIS lock permet à la session avec le verrou de lire et aux autres sessions de lire mais pas d’écrire.
  • UNE ÉCRIRE lock permet à la session avec le verrou de lire et d’écrire et d’autres sessions sans accès.

le FLUSH TABLES la syntaxe ne vous permet pas de spécifier une liste de tables aussi bien que acquérir une serrure. FLUSH TABLES WITH READ LOCK verrouille toutes les tables. FLUSH TABLES <tables> va vider ces tables. Le vidage des tables implique un certain verrouillage implicite, car les nouvelles écritures ne peuvent pas aller à une table pendant le vidage, mais ce verrou implicite est libéré dès que le vidage est terminé.

Si vous souhaitez verrouiller des tables spécifiques avec un verrou en écriture, LOCK TABLES <table> WRITE c'est ce que tu veux. Vous pouvez fournir une liste de tableaux séparés par des virgules ici. Si vous souhaitez verrouiller toutes les tables, vous devez fournir la liste complète.


7
2018-05-31 08:41



Vous avez terriblement tort. Write lock rend tous les accès à la table limités à la session où il est verrouillé. Si vous maintenez le verrou en écriture pendant une période prolongée, toutes les applications utilisant la table seront suspendues jusqu'à ce que le verrou soit libéré. De plus, il n’est pas nécessaire d’obtenir un verrou en écriture pour le rinçage. Les données de la table ne changent pas pendant le rinçage, à cause du verrouillage de lecture. - DukeLion
C'est ce que vous obtenez lorsque vous répondez au téléphone sans vérifier votre travail. Je vais le corriger. - Ladadadada
@DukeLion Je pense que hitler avait "terriblement tort", mal interpréter la documentation est probablement juste "un peu faux", ou même si vous étiez dur, "complètement faux" mais au point de causer ou de causer la terreur; sinistre ou choquant ou extrêmement, comme dans un crime, serait un peu fort. - Tom H
Peut-être ai-je un peu exagéré :) Si vous utilisez des verrous, de tels malentendus conduisent à des bogues très obscurs. - DukeLion
Je voudrais conclure en une simple déclaration- FLUSH TABLES WITH READ LOCK; permettra à toutes les sessions de fonctionner en lecture et ne permettra aucune modification des données pour aucune session. LOCK TABLE tblname WRITE; Verrouillera la table et permettra la lecture ou la modification des données pour la session émise, mais pas pour les autres sessions. Merci ...... - arn


Je voudrais conclure en une simple déclaration- FLUSH TABLES WITH READ LOCK; permettra à toutes les sessions de fonctionner en lecture et ne permettra aucune modification des données pour aucune session. LOCK TABLE tblname WRITE; Verrouillera la table et permettra la lecture ou la modification des données pour la session émise, mais pas pour les autres sessions. Merci ......


4
2018-06-02 05:21