Mysql InnoDB从读取行锁定

我已经阅读过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
上一篇:Python并行执行-threading.Lock无法按预期工作


下一篇:c#-确保对字典中值列表的线程安全操作