事务的特性和隔离级别

文章详细阐述了数据库事务的四个特性——原子性、一致性、隔离性和持久性,并介绍了SQL标准定义的四种事务隔离级别,包括读未提交、读已提交、可重复读和串行化,以及各自防止的问题。脏读、不可重复读和幻读是并发事务中可能出现的问题。MySQL5.7默认的隔离级别是可重复读,而Oracle的默认级别是读已提交。
摘要由CSDN通过智能技术生成

1. 事务的特性

简称ACID

1.原子性(Atomicity):事务被视为一个不可分割的操作单元,要么全部执行成功,要么全部失败回滚,不存在部分执行的情况。

2.一致性(Consistency):指事务执行前后,数据状态都是一致的,不存在矛盾。如果执行后数据是矛盾的,事务就会回滚到执行前的状态(执行前是一致的)。

3.隔离性(Isolation):多个事务并发执行时,每个事务的操作应当与其他事务的操作相互隔离,使得每个事务感觉到自己是在独立地操作数据库。隔离性保证了并发执行的事务之间不会互相干扰。

4.持久性(Durability):一旦事务提交成功,其对数据库的改变应该是永久性的,即使在系统故障或重启之后也能够保持。

2. 事务的隔离级别

事务的隔离级别定义了一个事务对其他事务的影响程度
为了保证四大事务特性的隔离性才产生的隔离级别

SQL、SQL2标准定义了四种隔离级别:

1.读未提交(Read Uncommitted):最低级别的隔离级别,事务可以读取尚未提交的数据,可能会出现脏读、不可重复读和幻读的问题;一事务写时禁止其他事务写。

2.读已提交(Read Committed):只限制同一数据写事务禁止其它读写事务。解决”脏读”,以及”更新丢失”;一事务写时禁止其他事务读写。

3.可重复读(Repeatable Read):限制同一数据写事务禁止其他读写事务,读事务禁止其它写事务(允许读)。解决”不可重复读”,以及”更新丢失”和”脏读”;一事务写时禁止其他事务读写、一事务读时禁止其他事务写。

4.串行化(Serializable):限制所有读写事务都必须串行化实行。要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。

3. 脏读

含义:事务A读取到事务B修改但还未提交的数据后,事务A又回滚更新操作,导致事务B读到的是脏数据,就是未进行提交但是回滚的数据。

图文详解

事务A要向账户存入100万,修改后还未提交,发现操作有误还未进行回滚修改后提交,事务B就读取到了事务A未提交的数据就进行操作,导致最终写入数据库的是错误的数据。

在这里插入图片描述

4.不可重复读

含义:事务A读取某个数据后,事务B对其做了修改,当事务A再次读该数据时得到与前一次不同的值。

图文详解

事务A读取了数据,事务B对数据进行修改后提交了事务,此时事务A 再去读取数据就是事务B已经提交后的数据,得到的是与上一次读取时不同的数据。

在这里插入图片描述

5. 幻读

含义:事务A在按查询条件读取某个范围的数据时,事务B又在该范围内插入了新的满足条件的数据,当事务A再次按条件查询数据时,会产生新的满足条件的数据。

图文详解

事务A查询某一账户某一时间段的交易记录,还未进行提交时,事务B又为这个账户新增一条记录提交,导致事务A最终查询到的符合查询条件的数据发生了变化。

在这里插入图片描述

6. mysql5.7以后默认隔离级别

可重复读 Repeatable Read
解决了脏读,不可重复读的问题

7.Oracle的隔离级别

只有两种
默认的隔离级别是:读已提交 Read Committed
串行化 Serializable:存在不可重复读的问题
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值