描述一下MySQL的乐观锁、悲观锁,锁的种类
-
乐观锁:乐观锁不是数据库自带的锁,如果要使用乐观锁,那么需要自己去实现;
一般情况下,会在表中新增一个version字段,每个更新数据version+1,在进行提交之前会判断version是否一致;
-
悲观锁:MySQL中绝大部分锁是悲观锁,按照粒度可以分为行锁和表锁;
- 行锁
- 共享锁:当读取一行记录的时候,为了防止别人修改,则需要添加S锁;
- 排他锁:当修改一行记录的时候,为了防止别人同时进行修改,则需要添加X锁; | | X|S | |--|--|--| | X|不兼容 | 不兼容 | | S|不兼容 |兼容 |
- 记录锁: 添加在行索引上的锁;
- 间隙锁:锁定范围是索引记录之间的间隙,针对可重复读以上的隔离级别;
- 临键锁:记录锁+间隙锁;
- 表锁
- 意向锁:在获取某行的锁之前,必须要获取表的锁,分为意向共享锁,意向排他锁;
- 自增锁:对自增字段所用的特殊表级锁;
- 行锁
锁模式的含义 *