数据库的ACID特性详解

数据库的ACID特性详解

我们在大学中学到的数据库基本理论中,是指由一系列连续的数据库操作组成的一个完整的逻辑过程。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

1、数据库事务在 数据库管理系统(DBMS)中,必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。

1)原子性(Atomicity)

事务的原子性指的是,一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

2)一致性(Consistency)

事务的一致性指的是,在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

3)隔离性(Isolation)

事务的隔离性指的是,在并发环境中,隔离性是指两个事务之间互不干扰。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

4)持久性(Durability)

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

事务的四个隔离级别:

1)未提交读(Read Uncommitted):
SELECT语句以非锁定方式被执行,所以有可能读到脏数据,隔离级别最低。(读不锁)

2)提交读(Read Committed):
只能读取到已经提交的数据。即解决了脏读,但未解决不可重复读。(读锁,等写完)

3)可重复读(Repeated Read):
在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。(写锁,等读完)

4)串行读(Serializable):
完全的串行化读,所有SELECT语句都被隐式的转换成SELECT … LOCK IN SHARE MODE,即读取使用表级共享锁,读写相互都会阻塞。隔离级别最高。

事务并发问题

1)脏读(Dirty Reads):
事务A读取了事务B的更新的数据,但是事务B回滚了,导致A读取的为脏数据。

2)不可重复读(Non-Repeatable Reads):
事务A读取同一数据两次,但是在两次之间事务B对该数据进行了修改并提交,导致事务A读取两次读取不一致。

3)幻读(Phantom Reads):
事务A修改全表的数据,在未提交时,事务B向表中插入或删除数据,导致事务A读取的数据与需要修改的数据不一致。

PS: 不可重复读针对的时数据的修改,幻读针对的时数据的新增和删除。解决不可重复读问题只需要给对应记录上行锁,而解决幻读需要对表加锁

隔离级别导致事务并发问题

在这里插入图片描述

实现事物隔离性主要有两种方式

隔离的实现主要有读写锁和MVCC(Multi-Version Concurrency Control)多版本并发处理方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值