提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
从对待锁的态度划分:乐观锁、悲观锁
1. 悲观锁(Pessimistic Locking)
2. 乐观锁(Optimistic Locking)
提升–05—并发编程之—原子性—CAS
1. 乐观锁-----版本号机制
2. 乐观锁-----时间戳机制
3. 两种锁的适用场景
按加锁的方式划分:显式锁、隐式锁
1. 隐式锁
1. 在当前事务中新插入一条聚簇索引记录后,该记录的trx_id 隐藏列代表的的就是当前事务的事务id
2. 如果其他事务此时想对该记录添加S锁或者X锁时,首先会看一下该记录的trx_id 隐藏列代表的事务是否是当前的活跃事务,
3. 如果是的话,那么就帮助当前事务创建一个X锁
隐式锁案例
分析
- 上述inert 语句 只是给新插入的那一行上了隐式锁.(前提是有索引列)
- 后面select * from student lock in share model 是要给全表上读锁
- 因为后面那句要给全表记录上锁,所以前面那条insert 语句 会将那一行的隐式锁转行为X锁.
- 所以后面的 select语句要上的 读锁 会和insert 语句X锁 冲突,所以select语句 等待
- 如果select语句 不是 select * 全表记录 ,而是 select 其他的已存在索引上的等值记录,那么就不会和insert 语句X锁 冲突,则可以查询成功