mysql并发事物时产生的死锁？案例：
1.新建一张简单的test表，如下：

2.表结构如下：

3.插入三条数据
数据如下：

4.需要开启两个窗口
先执行会话A，如下：

然后执行会话B，如下：

在执行会话A，如下：这个时候插入时，等待会话B 结束事物

在执行会话B，如下：这个时候插入时，会话B直接报错，这个时候产生了死锁;

大家明白了吗？
详解：
1.会话A 在删除id等于4的时候，存在间隙锁（3，8）。
2.会话B 在删除id等于6的时候，存在间隙锁（3，8）。
3.再次执行会话A时，添加id等于5的时候，会等待会话B释放锁。
4.再次执行会话B时，添加id等于7的时候，会等待会话A释放锁，这个时候就在互相等待过程，会造成死锁的情况。
下面解释一下间隙锁哦？
间隙锁：锁定一个范围，但不包含记录本身。例如数据库中数据id为3，8，11，那么锁定的区间可能为（-∞,3），(3,8)(8,11)，(11,+∞)，假如插入的数据为6，那此时锁定的区间为(3,6)，(6,8)被锁定，不包括要插入的6.
解决方法：
方法一：通常情况下，要删除一条数据，先查询数据是否存在，如果存在，再根据主键删除，否则不执行删除逻辑。其实这种方式也存在一定的风险，我们可以通过软删除的方式，避免高并发时出现数据已被删除，而其他事务正在删除不存在的数据。软删除是指通过字段决定数据是否已删除，然后定时的手动处理数据库中的数据。
方法二：尽量避免间隙锁的存在
以上两种方式；目前可以在单机上适用，多台节点，还得测试一下。