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

1 悲观锁

使用:

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

优点:

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

缺点:

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

二、乐观锁

使用:

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

优点:

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

缺点:

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