手动锁定单个表行

时间:2014-10-01 15:17:18

标签: php mysql

我之前在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查询访问所选行?

1 个答案:

答案 0 :(得分:0)

MySQL uses only table-level locking from MyISAM tables.对于行级锁定,您需要切换到innoDB

请参阅documentation,其中讲述了mysql中的锁定功能。