在MySQL(InnoDB)中锁定多行数据

4

在MySQL中锁定两行,我应该使用哪个命令:

SELECT * FROM <table> WHERE id=? OR id=? FOR UPDATE;

或者:

SELECT * FROM <table> WHERE id=? AND id=? FOR UPDATE;

我显然正在事务内,只是不确定它应该是AND还是OR

2个回答

7

如果您的WHERE子句为id=1 AND id=2,则没有行符合条件并且不会锁定任何行。

要锁定两行,您需要使用id=1 OR id=2,这样两行将包含在结果集中并且将被锁定。


4

我认为这并不重要。根据手册,锁定只会针对“符合结果集条件”的行进行。

对于SELECT ... FOR UPDATE,将锁定扫描的行,并预计会释放未符合结果集条件的行的锁定(例如,如果它们不符合WHERE子句中给定的条件)。

更新

您可以使用SHOW ENGINE INNODB STATUS来检查每种类型的SELECT所锁定的行。

您可以在此阅读阅读更多关于读取锁定的信息。


1
在我看来,AND和OR是有区别的。请参考@jleahy的回答。 - thekingoftruth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接