我之前已经在 MySQL 中锁定了整个表,但我需要做的是锁定特定行。更具体地说,当我的 PHP 脚本执行时,我需要它锁定特定行,以便无法读取(或写入)该行,运行其余代码,然后在完成时解锁该行。
我知道我需要使用 InnoDB,但我一直无法找到如何做到这一点。我不确定它是否需要事务,如果需要,如何使用它们进行行级锁定。
更新
也许我以错误的方式思考这个问题。从我已经完成的阅读和所提供的内容来看,InnoDB 表在读/写时自动锁定行,我得到了这一点。但我担心的是,我想通过 sleep
在我的 PHP 代码中引入延迟。我希望之前读取的行上的所有读取尝试都被锁定,直到 sleep 完成,并且脚本完成其其余功能。
如果我只是运行:
$result = $mysqli->prepare('...');
$result->bind_param('...', $...);
$result->execute();
$result->bind_result($...);
$result->fetch();
sleep('15');
//More script execution
$result->close();
这会阻止其他 MySQL 查询访问该选定的行,直到我关闭连接吗?
最佳答案
MySQL 仅使用 MyISAM 表中的表级锁定。
对于行级锁定,您需要切换到 innoDB
。
请参阅documentation它讲述了 mysql 中锁的功能。
关于php - 手动锁定单个表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144695/