数据库-事务-事务属性-隔离级别

本文详细介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,以及事务并发处理可能引起的脏读、不可重复读和幻读等问题。同时,探讨了四种数据库隔离级别:读未提交、读已提交、可重复读和串行化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务应该具有4个属性(ACID特性)

  1. 原子性(atomicity)。
    一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  2. 一致性(consistency)。
    事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  3. 隔离性(isolation)。
    一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持久性(durability)。
    指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

事务并发处理可能引起的问题

  1. 脏读(dirty read)
    一个事务读取了另一个事务尚未提交的数据。事务A、B并发执行时,当A事务update后,B事务select读取到A尚未提交的数据,此时A事务rollback,则B读到的数据是无效的"脏"数据。
  2. 不可重复读(non-repeatable read)
    一个事务的操作导致另一个事务前后两次读取到不同的数据。事务A、B并发执行时,当B事务select读取数据后,A事务update操作更改B事务select到的数据,此时B事务再次读去该数据,发现前后两次的数据不一样。
  3. 幻读(phantom read)
    一个事务的操作导致另一个事务前后两次查询的结果数据量不同。事务A、B并发执行时,当B事务select读取数据后,A事务insert或delete了一条满足A事务的select条件的记录,此时B事务再次select,发现查询到前次不存在的记录(“幻影”),或者前次的某个记录不见了。

数据库隔离级别

  1. read uncommited : 读未提交数据(会出现脏读,不可重复读和幻读)
  2. read commited: 读已提交数据(会出现不可重复读和幻读)
  3. repeatable read :可重复读(会出现幻读)
  4. serializable:串行化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值