simplifiedDB Asked: 2015-08-18 02:51:05 +0800 CST2015-08-18 02:51:05 +0800 CST 2015-08-18 02:51:05 +0800 CST FLUSH TABLE:无法执行给定的命令,因为您有活动的锁定表 mysql 772 如果我一个一个地执行这些查询,除了第一个之外都失败: 查询1: flush table tablename1 with read lock; 作品 查询2: flush table tablename2 with read lock; 错误:无法执行给定的命令,因为您有活动的锁定表 mysql 如果我按以下方式执行,它将起作用: 询问: flush table tablename1,tablename2 with read lock; 里面发生了什么? mysql mysql-5.6 2 个回答 Voted Best Answer Craig Efrein 2015-08-18T06:23:03+08:002015-08-18T06:23:03+08:00 这是因为 flush table tablename1,tablename2 with read lock; 包含在一笔交易中,并且 flush table tablename1 with read lock; flush table tablename2 with read lock; 不是。 在第二种情况下,第一个表被锁定用于该会话。该会话无法获得另一个表上的第二个锁,因为该会话已经打开了一个表。如果您尝试在同一个会话中使用 SELECT 访问另一个不同的表,例如 tablename2,这也将被拒绝。 MySQL [testlocks]> select * from tablename2; ERROR 1100 (HY000): Table 'tablename2' was not locked with LOCK TABLES 所以长话短说,通过只锁定一个表,你是说当前会话只能访问那个表。至少这就是我理解 MySQL 文档的方式。 或者你可以使用 flush table tablename1,tablename2 with read lock; 正如您已经知道的那样,这是 MySQL 的文档给出的语法。 Jehad Keriaki 2015-08-18T06:05:01+08:002015-08-18T06:05:01+08:00 根据这个页面,会话中的所有锁都必须在单个语句中获得。 需要锁的会话必须在单个 LOCK TABLES 语句中获取它需要的所有锁。当这样获得的锁被持有时,会话只能访问锁定的表
这是因为
包含在一笔交易中,并且
不是。
在第二种情况下,第一个表被锁定用于该会话。该会话无法获得另一个表上的第二个锁,因为该会话已经打开了一个表。如果您尝试在同一个会话中使用 SELECT 访问另一个不同的表,例如 tablename2,这也将被拒绝。
所以长话短说,通过只锁定一个表,你是说当前会话只能访问那个表。至少这就是我理解 MySQL 文档的方式。
或者你可以使用
正如您已经知道的那样,这是 MySQL 的文档给出的语法。
根据这个页面,会话中的所有锁都必须在单个语句中获得。