首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

唯一insert into on duplicate 死锁问题

判断唯一是否存在,存在更新数据 | 时间戳 | 事务1 | 事务2 | 事务3 || T1 | begin;insert into test(alias,age) valuse(9,9) on duplicate...所以意向锁被阻塞,等待中 T4时间事务1提交,gap锁释放 此时事务2的意向锁被事务3持有的gap锁锁住,事务3的意向锁被事务2持有的gap锁锁住,因此形成死锁,事务3回滚 这里需要注意的几点: 1、唯一执行...gap锁,所以主键执行insert into on duplicate在这个版本不会有问题,亲测在5.7.35版本已经修复唯一的问题 2、插入数据时如果唯一数据已经存在还会额外对这行数据加一个共享锁...S,即使已经报错唯一冲突了依旧会加入这个锁可能会影响其他操作,因此事务在遇到唯一报错的情况下要及时回滚事务,防止锁影响后续操作 3、建议 1、判断业务是否一定要在数据库中执行insert into...on duplicate操作,代码侧能否判断 2、唯一是否为必须 3、升级到没有问题的版本,如8.0新版本或5.7.35

96330
您找到你想要的搜索结果了吗?
是的
没有找到

insert唯一冲突的加锁情况分析

// insert唯一冲突的加锁情况分析 // 今天分享的内容是MySQL里面insert语句在发生冲突的时候加锁情况,废话就不多说了,直接从例子开始吧。...5 | +----+------+------+ 5 rows in set (0.00 sec) 接下来测试锁发生的场景: 从上面的图中不难看出,session A上的第一个insert...第二个insert操作因为重复的键值而报错,因为c=10的记录已经有了,按理说发生唯一冲突之后,这条语句失败了,应该不对MySQL有影响才对,实际上,这个insert语句做了两件事情: 1、报唯一冲突错误...undo log entries 1 MySQL thread id 5, OS thread handle 3124, query id 28 localhost ::1 root update insert...`t` trx id 254731 lock_mode X locks gap before rec insert intention waiting Record lock, heap no 7 PHYSICAL

2.4K30

Oracle insert into太慢

insert into太慢 insert into太慢?Roger 带你找真凶 运营商客户的计费库反应其入库程序很慢,应用方通过监控程序发现主要慢在对于几个表的insert操作上。...按照我们的通常理解,insert应该是极快的,为什么会很慢呢?而且反应之前挺好的。这有点让我百思不得其解。...通过检查event也并没有发现什么奇怪的地方,于是我通过10046 跟踪了应用的入库程序,如下应用方反应比较慢的表的insert操作,确实非常慢,如下所示: *我们可以发现,insert了...同时我们从上面10046 trace可以看出,该SQL执行之所以很慢,主要是因为存在了大量的物理读,其中4579条数据的insert,物理读为4534;这说明什么问题呢?...那么为什么前面的问题中,insert会突然变慢呢? 下面我们来进行3次insert 测试。

2K20

insert into select 和 insert into values区别「建议收藏」

INSERT INTO SELECT语句:从一个表复制数据,然后把数据插入到一个已存在的表中。...将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中, 这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。...1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1 或者...:Insert into Table2 select  *  from Table1 注意:(1)要求目标表Table2必须存在,并且字段field,field2…也必须存在 (2)注意Table2的主键约束...,如果Table2有主键而且不为空,则 field1, field2…中必须包括主键 (3)注意语法,不要加values,和插入一条数据的sql混了,不要写成: Insert into Table2(field1

62520
领券