我看到了很多关于使用Select FOR UPDATE和锁定行的帖子,但是我没有找到任何解释当代码尝试读取被锁定的行时会发生什么的帖子。
例如,假设我使用以下代码:
$con->autocommit(FALSE);
$ps = $con->prepare( "SELECT 1 FROM event WHERE row_id = 100 FOR UPDATE");
$ps->execute();
...
//do something if lock successful
...
$mysqli->commit();
在这种情况下,我如何确定我的锁定操作是否成功?当行已经被锁定时,处理该场景的最佳方法是什么?
抱歉如果已经有相关描述,但我找到的都是顺利路径的解释。
FOR UPDATE
查询的事务将等待所有具有锁定的事务提交。另外:通常情况下,你不想阻止其他进程的读取,你想要这样做吗?如果是,请解释一下为什么。关于问题:“如何知道此锁定成功”:execute()
返回true或false(或者:如果启用了异常,则在失败时抛出异常)。 - Wrikken