简单的更新查询导致MySQL死锁

时间:2016-12-13 01:51:09

标签: mysql deadlock

我有一张简单的表

CREATE TABLE counter (
id int(11) NOT NULL AUTO_INCREMENT,
x_counter int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

和一个简单的查询

begin transaction
for (i=0 to 10)
    update counter set x_counter = x_counter + 1 where id = XYZ;
commit

当我从多个进程运行具有相同XYZ值的查询(每个进程更新同一行)时,不会发生死锁(我认为我做了足够的测试来说明它)

但是当我进行完全相同的测试时,除了使用不同的XYZ值(每个进程更新不同的行)之外,我都会遇到死锁。

我对它发生的原因有所了解,但我不确定(不是数据库专家)。

有人可以解释一下这里发生了什么,我该如何预防呢?

由于

0 个答案:

没有答案