数据库ACID、脏读、不可重复读和幻读

本文深入探讨了数据库事务的ACID属性,即原子性、一致性、隔离性和持久性,解释了事务如何确保数据操作的正确性和并发环境下的数据一致性。同时,文章详细阐述了脏读、不可重复读和幻读的概念及其区别。

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

事务:

     事务是由一组SQL语句组成的逻辑处理单元,事务具有4个属性,通常简称为事务的ACID属性。

(1)事务存在目的:

     为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰

 (2)事务的执行过程     

当一个事务被提交给了DBMS(数据库管理系统),要么全执行,要么全都不执行,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行

(3)产生的便利性

事务能够简化我们的编程模型

不需要我们去考虑各种各样的潜在错误和并发问题

事务本质上是为了应用层服务的,而不是伴随着数据库系统天生就有的

使用事务时,要么提交,要么回滚, 我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办的问题

ACID:

    Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使数据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

脏,幻,不可重复读

1、脏读(dirtyRead):

脏读是指的一个事物正在访问数据,并且对数据进行了修改,

而且这种修改还没有提交到数据库中

这时,另一个事物也访问这个数据 ,然后使用了这个数据

因为这个数据还没有提交数据,那么另外一个事物读到的这个数据就是脏数据

2、不可重复读

不可重复读针对的是同一个主键的数据。

在同一事务中,两次读取同一数据(同一主键),得到内容不同

3、虚读(幻读)

同一事务中,用同样的操作读取两次,得到的记录数不相同

幻读针对的是一批数据两次读取中,有新增或者减少

区别:针对点

幻读针对的是一批数据两次读取中,有新增或者减少

不可重复读针对的是同一个主键的数据。

脏读针对读取了未提交数据

幻读和不可重复读都是读取到了另一条已经提交的事物,这一点和脏读不同

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值