在MySQL(InnoDB)中锁定多行
要在MySQL中锁定两行,我应该使用:在MySQL(InnoDB)中锁定多行,mysql,sql,innodb,Mysql,Sql,Innodb,要在MySQL中锁定两行,我应该使用: SELECT * FROM <table> WHERE id=? OR id=? FOR UPDATE; SELECT*从其中id=?或者id=?更新; 或: SELECT*从其中id=?和id=?更新; 我显然是在交易中,只是不确定它应该是和还是或?我认为这无关紧要。根据,将仅为“符合结果集中包含条件”的行获取锁 对于选择。。。对于UPDATE,将为扫描的行获取锁,并为不符合结果集中包含条件的行释放锁(例如,如果它们不符合WHERE子句
SELECT * FROM <table> WHERE id=? OR id=? FOR UPDATE;
SELECT*从其中id=?或者id=?更新;
或:
SELECT*从其中id=?和id=?更新;
我显然是在交易中,只是不确定它应该是
和还是或?我认为这无关紧要。根据,将仅为“符合结果集中包含条件”的行获取锁
对于选择。。。对于UPDATE,将为扫描的行获取锁,并为不符合结果集中包含条件的行释放锁(例如,如果它们不符合WHERE子句中给出的条件)
更新
您可以使用SHOW ENGINE INNODB STATUS
检查每种类型的SELECT
锁定了哪些行
您可以阅读有关读取锁和的更多信息。如果您的WHERE
子句是id=1和id=2
,则没有行可以包含在结果集中,因此不会锁定任何行
要锁定这两行,您需要使用id=1或id=2,这样两行都将包含在结果集中并被锁定。我认为是和还是都很重要。请参阅@jleahy的答案。
SELECT * FROM <table> WHERE id=? AND id=? FOR UPDATE;