数据库事务和事务隔离

什么是事务

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列读或写操作。其目的是提供三种方法:失败恢复到正常状态的方法、保持一致性的方法、并发操作之间保持隔离的方法,通俗的说是那一系列操作要么完全地执行,要么完全地不执行。

事务的ACID特性

  • A:原子性(Actomicity),该系列操作作为一个整体,不能被分割,要么全执行,要么都不执行;
  • C:一致性(Consistency),确保数据从一种状态变为另一种状态;
  • I:隔离性(Isolation),多个事务并发执行时,彼此之间互不影响;
  • D:持久性(Durability),当事务提交成功后,对数据的修改要永久保存在数据库中。

并发异常类型

  • 回滚丢失: 由于一个事务的失败回滚导致另一个事务的更新丢失了;
  • 覆盖丢失: 更新被其他事务给覆盖了;
  • 脏读: 一个事务读取了另一个事务修改未提交的数据;
  • 不可重复读: 一个事务对同一行数据执行了两次或更多次查询,但是却得到了不同的结果;
  • 幻读: 与不可重复读相似,不过针对的是数据的数量,当一个事务查询记录两次或多次时,得到的数量不一致。

事务隔离级别

  • 读未提交: 一个事务的更新语句没有提交,但是别的事务可以读到这个改变;

  • 读已提交: 一个事务只能看到其他事务已经提交的更新、看不到未提交的更新,消除了脏读和回滚丢失,Oracle/Sqlserver就是此类;

  • 可重复读: 一个事务中进行两次或多次同样的对于数据内容的查询,得到的结果是一样的,但不保证对于数据条数的查询是一样的,只要存在读改行数据就禁止写,消除了不可重复读和覆盖丢失。

  • 串行化: 事务执行不允许其他事务操作,只要存在读就禁止写,但可以同时读,消除了幻读,但是效率太低。

    隔离级别 回滚丢失 脏读 不可重复读 覆盖丢失 幻读
    读未提交
    读已提交
    可重复读
    串行化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章