1 悲观锁与乐观锁

  • 悲观锁:认为数据随时会被修改,每次读取数据前都会上锁,防止其他事务读取或修改数据;应用于数据更新比较频繁的场景
  • 乐观锁:操作数据时不上锁,但是更新时会判断操作期间有无其他事务更新数据,若更新过,则失败重试;适合读多写少的场景。

    1.1 实现乐观锁的方式

  • 加版本号或时间戳,每次更新数据时更新这个字段

    2 数据库的四种隔离级别

  • 未提交读(Read Uncommitted):一个事务提交之前,其执行结果对其他事务可见。(会导致脏读,不可重复读,幻读)

  • 提交读(Read Commited):一个事务只能看见已经提交的事务所作的改变。(避免脏读)
  • 可重复读(Repeatable Read):确保一个事务多次读取相同数据得到相同结果。(避免不可重复读)
  • 可串行化(Serizlizable):强制事务串行执行,使之不可能相互冲突。(避免幻读,但可能导致超时和锁竞争,实际很少使用)

    3 事务的特性

  • 原子性:逻辑上不可分割,要么全部提交成功要么全部回滚

  • 一致性:所有事务对一个数据的读取结果是相同的
  • 隔离性:事务的修改提交前,对其他事务不可见
  • 持久型:事务提交成功后,对数据的修改是永久的