事务

事务是以可控的方式对数据资源(数据库,文件等存储介质)进行访问的一组操作。

  1. 事务的4个特性(acid)
  • 原子性:所有的操作是不可分割的整体;
  • 一致性:事务的执行前后对数据的操作需要保持一致;
  • 隔离性:主要面向对数据资源访问的并发性,也需要数据的一致性。当超过两个以上的事务访问数据资源时,不同的隔离级别决定了各个事务对数据资源访问的不同行为;事务的按照隔离级别的强弱依次为Read UnCommitted, Read Committed,Repeatable Read 和Serializable.
    Read UnCommitted:最低的隔离级别,一个事务可以读取另一个事务没有提交的更新结果。其会造成脏读,不可重复度,幻读。
    Read Committed:是大部分数据库默认采取的隔离级别,一个事务在更新提交后,另外一个事务才可能督导更新后的结果。无法避免不可重复读和幻读。
    Repeatable Read:保证在多个事务下,对同一个数据的读取是相等的。无法避免幻读。
    Serializable,最严格的隔离级别,所有的事务都是按照顺序进行。
  • 持久性:一旦事务提交成功,是不可回退的。
  1. 一些解释
  • 脏读(Dirty Read):A事务读取B事务尚未提交的数据并在此基础上操作,而B事务执行回滚,那么A读取到的数据就是脏数据。
  • 不可重复读(Unrepeatable Read):事务A重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务B修改过了。
  • 幻读(Phantom Read):事务A重新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务B提交的行。