Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL(InnoDB)中锁定多行_Mysql_Sql_Innodb - Fatal编程技术网

在MySQL(InnoDB)中锁定多行

在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子句

要在MySQL中锁定两行,我应该使用:

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;