2012-03-05 65 views
3

要锁定在MySQL两行锁定多行,我应该使用:在MySQL(InnoDB的)

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

或者:

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

我明明是在事务中只是不知道它是否应该是AND还是OR

回答

3

我不认为这很重要。根据manual,只会为“有资格包含在结果集中”的行获取锁定。

对于SELECT ... FOR UPDATE,获取锁定的扫描行,并预计将发布不包含在结果集中的资格(例如行,如果他们不符合在WHERE子句中给出的标准)。

更新

您可以使用SHOW ENGINE INNODB STATUS检查锁定哪些行对每种类型的SELECT

您可以阅读更多关于阅读锁herehere

+1

无论是AND还是OR,IMO都无所谓。请参阅@ jleahy的回答。 – thekingoftruth 2014-06-26 19:37:00

6

如果您的WHERE子句是id=1 AND id=2那么没有行将符合条件包含在结果集中,因此没有行将被锁定。

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