数据库事务和事务隔离

什么是事务

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

事务的ACID特性
  • A:原子性(Actomicity),该系列操作作为一个整体,不能被分割,要么全执行,要么都不执行;
  • C:一致性(Consistency),确保数据从一种状态变为另一种状态;
  • I:隔离性(Isolation),多个事务并发执行时,彼此之间互不影响;
  • D:持久性(Durability),当事务提交成功后,对数据的修改要永久保存在数据库中。
并发异常类型
  • 回滚丢失: 由于一个事务的失败回滚导致另一个事务的更新丢失了;
  • 覆盖丢失: 更新被其他事务给覆盖了;
  • 脏读: 一个事务读取了另一个事务修改未提交的数据;
  • 不可重复读: 一个事务对同一行数据执行了两次或更多次查询,但是却得到了不同的结果;
  • 幻读: 与不可重复读相似,不过针对的是数据的数量,当一个事务查询记录两次或多次时,得到的数量不一致。
事务隔离级别
  • 读未提交: 一个事务的更新语句没有提交,但是别的事务可以读到这个改变;

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

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

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

    隔离级别回滚丢失脏读不可重复读覆盖丢失幻读
    读未提交
    读已提交
    可重复读
    串行化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值