手动锁定单个表行


Manually Lock a Single Table Row

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

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

请参阅告诉mysql中锁功能的文档。