MySQL的锁:
排他锁:读写,读读都不能并行
自增锁:表锁,主键是自增的话,会串行执行insert,后面的insert必须等待第一个事务完成
插入意向锁:如果insert 不是同一行的话,不会互相影响
记录锁(行锁):select会影响修改和删除本行,锁的是索引
间隙锁:锁间隙,防止select时修改间隙里面的数据(在RR下,防止出现幻读;RC的话会自动消失)
临隙锁,记录锁和间隙锁的结合,也是防止出现幻读,RC下也会自动消失
(1)记录锁锁定索引记录;
(2)间隙锁锁定间隔,防止间隔中被其他事务插入;
(3)临键锁锁定索引记录+间隔,防止幻读;
读脏: 读取到了没有提交的数据
不可重复读: 两次读取到的数据不一样(数据被修改)
幻读:两次读取到的结果集不一样(中间有插入或者删除数据)
MySQL四种隔离级别
读未提交:隔离级别最低,select不加锁,可能出现读脏
读提交:用的最多,可能出现幻读,除了外键约束和重复建检查封锁区间,都是记录锁。普通的select是快照读
可重复读:默认,会有间隙锁和临隙锁,锁住范围,防止不可重复读。普通的select是快照读
串行化:隔离级别最高,所有的s