锁定如何在INSERT..ON DUPLICATE KEY UPDATE语句中起作用?

时间:2013-10-28 12:45:59

标签: mysql insert-update database-deadlocks

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

1 个答案:

答案 0 :(得分:0)

根据MySQL Developer Doc

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

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