MySQL文档对于LOCK TABLES命令的说明如下:
MySQL允许客户端会话显式获取表锁,以便与其他会话合作访问表,或在会话需要独占访问它们时防止其他会话修改表。
很好,所以我尝试执行:
mysql>LOCK TABLES foo WRITE;
我可以检查其他进程是否能访问foo
。
问题在于,我无法访问其他表。文档如下:
需要锁定的会话必须在单个LOCK TABLES语句中获取其所需的所有锁。虽然这样获得的锁被保留,但该会话只能访问锁定的表。
这很奇怪。为什么我还被迫锁定其他表?我只想防止其他人访问foo
。我不想锁定其他任何东西,我只想像平常一样访问其他表。
如何只锁定一个表,而不改变其他表的任何内容?
select * from foo for update
? 这将有效地锁定它。 - Marc Bselect * from foo for update
对我来说并没有“锁定”任何东西,它只是打印整个表格并退出。 - Mark Galeck