我在尝试使用INSERT..ON DUPLICATE KEY UPDATE更新多行(批处理)时遇到死锁。 MySQL是否锁定了一个批次中的所有行,还是只锁定了它在某个时间点更新的行?
答案 0 :(得分:0)
在MySQL 5.6.6之前,使用诸如MyISAM之类的存储引擎对分区表上的INSERT ... ON DUPLICATE KEY UPDATE使用表级锁定锁定表的所有分区。 (对于使用存储引擎的表,如使用行级锁定的InnoDB,这不会也不会发生。)在MySQL 5.6.6及更高版本中,此类语句仅锁定分区键所在的分区列已更新。有关更多信息,请参见第18.6.4节“分区和锁定”。
我猜InnoDB
将使用索引并避免表级锁定(除非表太小,以至于MySQL会直接使用表级锁定)。