现象如下图所示:
死锁原因分析:
如上图所示,此处锁的类型为X也就是排它锁,mysql的默认引擎InnoDB会对update操作自动添加排它锁,排它锁属于行级锁类型,由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以即使是访问不同行的记录,如果使用了相同的索引键,也是会出现锁冲突的,此处使用的索引为‘day_time’,从事务id上可以看出这是连续的2个事务。由于涉及到外部大量的接口调用以及大量数据库的操作,使用了多线程进行操作,导致针同一时间对同一天(day_time)的数据进行update,产生了死锁。