事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败.

0. 事务的四大特性

  • 原子性:强调事务的不可分割.要么全部完成,要么全部失败,失败会进行回滚,之前的操作会被回滚为事务之前的状态
  • 一致性:强调的是事务的执行的前后,数据的完整性要保持一致.
  • 隔离性:一个事务的执行不应该受到其他事务的干扰.
  • 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.

1. 不考虑事务会引发的问题

  • 脏读 :一个事务读到另一个事务还没有提交的数据.
  • 不可重复读 :一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致.
  • 虚读/幻读 :一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.

2. 事务的隔离级别

  • read uncommitted :未提交读.脏读,不可重复读,虚读都可能发生.
  • read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.(Oracle默认)
  • repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.(MySQL默认)
  • serializable :串行化的.避免脏读,不可重复读,虚读的发生.