MySQL 悲观锁和乐观锁是什么?

答案

悲观锁和乐观锁都是为保证一致性的一种锁。

一、悲观锁

使用:

  • 1.关闭autocommit=0;
  • 2.在事务中使用 select .. from … where … for update;给行加排他锁
  • 3.select命中的行必须有索引,否则会锁表

优点:

  • 1.保守策略,所以数据安全性高

缺点:

  • 1.有加锁等额外开销,效率低
  • 2.可能引起死锁
  • 3.降低并行行,数据被锁住后其他事物必须等待

二、乐观锁

使用:

  • 1.表中增加版本号或时间戳数据列
  • 2.读取数据是同时读取版本号
  • 3.更新数据时添加版本号为条件,同时版本号增加1
  • 4.如果更更新失败,提示用户

优点:

  • 1.没有锁,效率高
  • 2.不会引起死锁

缺点:

  • 1.这里是列表文本遇到两个事务统一时间读取一行数据时,会引起问题