我之前在MySQL中锁定了整个表格,但我需要做的是锁定一个特定的行。更具体地说,当我的PHP脚本执行时,我需要它来锁定一个特定的行,以便无法读取(或写入),运行其余代码,然后在行完成时解锁。
我知道我需要使用InnoDB,但我一直无法找到如何做到这一点。我不确定它是否需要交易,如果是,那么如何将它们用于行级锁定。
更新
也许我以错误的方式思考这个问题。从我已经完成的和已经提供的读取开始,InnoDB表在读/写时自动锁定行,这是我得到的。我担心的是我想通过sleep
引入我的PHP代码延迟。我希望在之前读取的行上的任何和所有读取尝试都被锁定,直到该睡眠结束,并且脚本完成其余部分的功能。
如果我刚跑:
$result = $mysqli->prepare('...');
$result->bind_param('...', $...);
$result->execute();
$result->bind_result($...);
$result->fetch();
sleep('15');
//More script execution
$result->close();
在我关闭连接之前,是否会阻止其他MySQL查询访问所选行?
答案 0 :(得分:0)
MySQL uses only table-level locking from MyISAM tables.
对于行级锁定,您需要切换到innoDB
。
请参阅documentation,其中讲述了mysql中的锁定功能。