Mysql Innodb:RR级别下 lock table 。。 write为何会阻塞另一事务中的select?

我在一个事务上运行了lock table employees write,然后在另一个事务上用select语句,没有for update或者lock in share mode

按说select是快照读,不加锁的,为何会被 lock table 。。 write的表锁阻塞?

阅读 3.5k
2 个回答

The downside to locking the tables is that no session can update a READ-locked table (including the one holding the lock) and no session can access a WRITE-locked table other than the one holding the lock.

醉了。。。你咋老邀请我,,翻文档看看吧
https://dev.mysql.com/doc/ref...

锁定写

lock table my_table_name write;

的意思是写锁定, 获得写锁时,其他会话读和写都不行.

要想让别的session可以读, 要用

lock table my_table_name read;

才行(不过这时你自己也不能写的!).

lock table my_table_name read;的意思不是不让读,恰相反,其他会话可以读, 但写不行.

或者说锁的级别是这样的:

lock table xxxx write > lock table xxxx read

这里有很详细的描述:

https://blog.csdn.net/sunhuaq...

lock table主要的使用场景有两个:模拟事务处理或加快批处理时update的速度。
其他情况因为在写时InnoDB本身就是事务型的引擎,不般不需要手工加锁。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题