我可以通过 MySQL 查询的 IN 子句更新的行数有限制吗?

Is there a limit on the number of rows I can update via an IN clause of a MySQL query?

我可以使用 IN 子句在单个查询中更新的行数有限制吗?例如:

mysql_query("UPDATE `table` SET `row`=1 WHERE `id` IN(1,2,3,4,5,6,7,8....5000)");

我可以一次更新所有 5000 行吗?或者 MySQL 对 IN 子句中的项目数有限制吗?

请注意: 我想知道在单个查询中是否存在更新限制 MySQL 会说 "maximum number of IN clause entries exceeded"。也就是说,我正在询问可能的限制 ,而不是 MySQL 中的 "maximum packet size" 设置。

根据 MySQL documentation for the IN function,对于可以在此类列表中指定的值的数量没有硬限制。文档具体说:

The number of values in the IN list is only limited by the max_allowed_packet value.

但是,还有另一个问题 here 讨论是否存在 实际限制 ,超过该限制,包含值的临时 table 可能在 WHERE 子句中与 JOININ(subquery) 一起使用时会产生更好的性能。