【发布时间】:2017-02-01 05:14:18
【问题描述】:
MySql = v5.6
表引擎 = InnoDB
我打开了一个 mysql cli。我跑:
START TRANSACTION;
SELECT id FROM my_table WHERE id=1 FOR UPDATE;
然后我打开并运行第二个 cli:
SELECT id FROM my_table WHERE id=1;
我预计它会等到我提交或回滚第一个事务,但它没有,它只是立即恢复行,就好像没有发生行锁定一样。
我进行了另一项测试,在第一个 cli 中更新了 status 字段,但在提交事务之前我看不到第二个 cli 中的更改,证明事务确实有效。
我是误会FOR UPDATE还是做错了什么?
更新:
需要FOR UPDATE第二次SELECT查询
【问题讨论】:
-
表被锁定且选择为读取功能时可以读取
-
@Rafiq 对不起,我不明白你的意思?
-
@Rafiq - table 锁定似乎与这个问题无关。 行锁定是相关的。
标签: mysql transactions locking innodb rowlocking