如何在MySql中对所有表施加写锁?

如何在MySql中对所有表施加写锁?

如何在 MySql 中暗示所有表上的 WRITE 锁定?我尝试了以下操作,但出现错误。

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

答案1

你在这里想做什么?如果你对 MySQL 中的锁的功能做出假设,那么它可能会有点令人困惑。

  • A锁允许具有锁的会话读取,而其他会话可以读取但不能写入。
  • A锁允许具有锁的会话进行读写,而其他会话则无法访问。

FLUSH TABLES语法不允许您指定表列表获取锁。 FLUSH TABLES WITH READ LOCK锁定所有表。 FLUSH TABLES <tables>将刷新这些表。刷新表时会涉及一些隐式锁定,因为刷新表时无法对表进行新的写入,但刷新完成后会立即释放此隐式锁定。

如果您想用写锁锁定特定表,LOCK TABLES <table> WRITE这就是您想要的。您可以在此处提供以逗号分隔的表列表。如果您想锁定所有表,则需要提供整个列表。

答案2

我想用简单的语句来总结一下 - FLUSH TABLES WITH READ LOCK; 将允许所有会话执行 READ 操作,并且不允许对任何会话进行任何数据修改。LOCK TABLE tblname WRITE; 将锁定表,并且它将允许对发出的会话进行读取或数据修改,但不允许对其他会话进行读取或数据修改。谢谢......

相关内容