40讲insert语句的锁为什么这么多

2019-06-27  本文已影响0人  carlclone

知识点

1 自增锁 申请到 id 后 释放
2 insert into …select select 另一个表的数据插入
3 什么时候会加间隙锁? 可重复读级别 , 查的时候
4 binlog_format=statement , 一个场景 , 如果没有间隙锁的情况 , 第一个insert 可能后写入 binlog , 出现主备不一致
5 insert into t2 … (select c+1 from t force index(c) order by c desc limit 1 , 加(4,supernum]的间隙锁 , 扫描一行
6 using temporary 使用了临时表
7 innodb_rows_read 引擎层实际扫描行数
8 一个意料之外会导致全表扫描,全部加间隙锁的案例
9 insert into t … (select c+1 from t force index(c) order by c desc limit 1
10 执行逻辑 , 1 创建临时表 , 扫描索引 c , 4 ,3,2,1 写入临时表 , limit1 取临时表第一条
11 上面那个案例不是很懂 ,总之就是引擎担心同表边读边写影响计算逻辑 , 总之解决方案先 insert 到临时表,再 insert 回去
12 创建内存临时表 create temporary table ,…. engine=memoey
13 insert 唯一键冲突 的一个案例 事务,阻塞,等待回滚
14 唯一键冲突导致的死锁 的一个案例
15 什么是记录锁? 什么情况会加
16 该死锁执行逻辑 : 事务 seesion A 插入 , 加记录锁 , session B 插入同样一行 , 发现冲突,加锁 , c 也一样加读锁 , A 回滚 , 但是 b 和 c 都要继续执行插入 , 都要加写锁 , 互相被对方的读锁阻塞 , 形成死锁
17 死锁案例的示意图
18 insert into … on duplicate key update
19 平时两个表烤数据用的什么方法 , 注意事项 , 优势

上一篇 下一篇

猜你喜欢

热点阅读