我已经阅读过mysql文档,也许我只是不明白这一切.我正在寻找的是读取其他会话的行锁定.当行被锁定时,我希望其他会话等到锁被释放.我不希望其他会话从快照中读取!他们必须等到发布!
我想得到的是与以下示例完全相同,但对于单行而不是整个表锁:
START TRANSACTION
LOCK TABLES table1 WRITE
SELECT * FROM table1 WHERE id = 40912
UPDATE table1 SET column1 = 'value1' WHERE id = 40912
UNLOCK TABLES
COMMIT
先感谢您!
解决方法:
Elena Sharovar的答案是一种方法,但也许并不能完全解释所需要的.将要执行SELECT的每个进程都需要使用具有相同字符串的GET_LOCK.如果他们这样做,MySQL将自动等待(最多指定的秒数)返回结果,直到另一个线程释放锁定.
这是随着时间从上到下发生的事情:
THREAD 1 THREAD 2
DO GET_LOCK("table1.40912", 30)
SELECT * FROM table1 WHERE id=40912 DO GET_LOCK("table1.40912", 30)
[UPDATE query] [automatically waits]
[UPDATE query] [automatically waits]
DO RELEASE_LOCK("table1.40912") [lock finally obtained, query terminates]
SELECT * FROM table1 WHERE id=40912