2017-03-02 66 views
1

我正试图获取数据库中表的行级锁,以防止任何将来的会话读取该行直到锁被释放。MySQL和PHP:使用SELECT FOR UPDATE

为了实现这一点,我一直试图在索引列上使用SELECT ... FOR UPDATE语法,但是我似乎无法阻止其他会话在使用完全相同的查询时读取该行。

还有什么我需要做的吗?我使用的是MySQL 5.5,PHP 7,问题表是Innodb。

为了详细说明,流程是这样的:

START TRANSACTION; 
SELECT id FROM tbl WHERE id = 1 FOR UPDATE; 
... (PHP stuffs) 
UPDATE tbl SET value = 'xyz' WHERE id = 1; 
COMMIT TRANSACTION; 

后续的请求也将运行的代码完全一样的台词,但我想一个请求从开始直到它提交事务阻止其他人。

回答

0

你看过MySql文档中关于InnoDB锁类型的文章吗?

https://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html

+0

我不相信这些适用于使用'FOR UPDATE'时。 –

+0

欢迎来到SO @cesarandré请避免链接唯一的答案。如果不能发表评论,请使用评论部分,首先收集声望。 – 2017-07-19 18:18:59