2

我在尝试使用 INSERT..ON DUPLICATE KEY UPDATE 更新多行(一批)时遇到死锁。MySQL 是锁定一批中的所有行还是仅锁定它在某个时间点更新的行?

4

1 回答 1

0

根据MySQL 开发人员文档

在 MySQL 5.6.6 之前,使用存储引擎(例如 MyISAM)对分区表执行 INSERT ... ON DUPLICATE KEY UPDATE,该存储引擎使用表级锁锁定表的所有分区。(这不会发生,也不会发生在使用存储引擎(如 InnoDB)的表中,这些引擎采用行级锁定。)在 MySQL 5.6.6 及更高版本中,此类语句仅锁定那些分区键列已更新的分区。有关详细信息,请参阅第 18.6.4 节,“分区和锁定”。

我想InnoDB会使用索引并避免表级锁定(除非表太小以至于 MySQL 会直接使用表级锁定)。

于 2014-03-22T12:18:08.470 回答