MySQL 悲观锁和乐观锁是什么?
答案
悲观锁和乐观锁都是为保证一致性的一种锁。
一、悲观锁
使用:
- 1.关闭autocommit=0;
- 2.在事务中使用 select .. from … where … for update;给行加排他锁
- 3.select命中的行必须有索引,否则会锁表
优点:
- 1.保守策略,所以数据安全性高
缺点:
- 1.有加锁等额外开销,效率低
- 2.可能引起死锁
- 3.降低并行行,数据被锁住后其他事物必须等待
二、乐观锁
使用:
- 1.表中增加版本号或时间戳数据列
- 2.读取数据是同时读取版本号
- 3.更新数据时添加版本号为条件,同时版本号增加1
- 4.如果更更新失败,提示用户
优点:
- 1.没有锁,效率高
- 2.不会引起死锁
缺点:
- 1.这里是列表文本遇到两个事务统一时间读取一行数据时,会引起问题