一、InnoDB锁种类
1、类型
- 共享锁(S)
读锁,可以同时被多个事务获取,阻止其他事务对记录的修改;
老技术,现在读不加锁,有MVCC实现
- 排他锁(X)
写锁,只能被一个事务获取,允许获得锁的事务修改数据;
所有当前读加排他锁(select for update、update、delete)
2、锁粒度
- 行级锁
作用在索引上
聚簇索引
二级索引
*** 唯一索引/非唯一索引 * RC/RR,4种情况逐一分析
两次当前读之间,其他的事务不会插入新的满足条件的记录 。
锁住间隙: 1、[131,140]~[134,130]
2、[134,130]~ [134,150]
3、[134,150]~[137,100]
- 间隙锁
解决可重复读模式下的幻读问题;
GAP锁不是加在记录上;
GAP锁锁住的位置,是两条记录之间的GAP;
保证两次当前读返回一致的记录;
- 表级锁
lock tables
元数据锁(meta data lock,MDL)
全表扫描“表锁”
所有记录加锁后返回,然后由MySQL Server层进行过滤,把无需锁释放掉,加了一次释放了一次,消耗资源。
二、加锁过程
注意死锁哦!!