我已经阅读了 mysql 文档,也许我只是不太理解。我正在寻找的是来自其他 session 的阅读的行锁定。当该行被锁定时,我希望其他 session 等待直到锁定被释放。我不希望其他 session 从快照中读取!他们必须等到发布!
我想得到的与下面的例子完全一样,但是是单行而不是整表锁:
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
关于Mysql InnoDB 行锁定读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045021/