为什么在子查询中选择mysql中的同一个表时会产生死锁?

时间:2015-12-16 08:33:53

标签: mysql transactions deadlock

我发现了一件非常有趣的事情,发现死锁如下:

最新检测到的死锁

Transation(1):

UPDATE A set value = 1 where id = 1;

  

(1)等待桌子A X锁定:
  RECORD LOCKS space id 1174 page no 3 n   位120表索引PRIMARY表。一个trx id   524946 lock_mode X锁定rec而不是间隙等待
  记录锁定,堆没有   28物理记录:n_fields 16;紧凑格式;信息位0

Transation(2):

UPDATE B INNER JOIN (  
     SELECT A.id, A.value AS value1, IFNULL(t.value, 0) AS value2  
     FROM A  
     LEFT JOIN (  
       SELECT SUM(c.value) AS value  
       FROM C  
       INNER JOIN A ON C.a_id = A.id  
       GROUP BY C.a_id  
     )
  ) t SET B.value = t.value1 + t.value2  
  

(1)保持表A S锁;
  RECORD LOCKS空格id 1174页3 n位120索引表test.A trx id 281479462315824锁定模式S锁定rec而不是间隙
  记录锁定,堆没有2物理记录:   n_fields 16;紧凑格式;信息位0

     

(2)等待表A S锁;
   RECORD LOCKS空格id 1174页3 n位120索引表的主要内容lancai_u.finance_user trx id 281479462315824锁定模式S等待
  记录锁,堆没有28物理记录:n_fields 16;紧凑格式;信息位0

0 个答案:

没有答案