事务(Transaction)

MySQL---- 事务(Transaction)

一、概述

​ 事务就是用户定义的一系列数据库操作(DML),这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。

​ 例如:张三转账给李四,必须保证张三账户减少 8000,李四账户增加 8000,这两项操作必须全部成功,如何保证? 需要事务。

二、四大特征(ACID)

  • 原子性(Atomicity):整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。
  • 一致性(Consistency):在事务开始之前与结束之后,数据库都保持一致状态。
  • 隔离性(Isolation):一个事务不会影响其他事务的运行。
  • 持久性(Durability):在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。

三、事务中的一些术语:

  • 事务(Transaction):一批操作(一组 DML)
  • 开启事务(Start Transaction)
  • 回滚事务(rollback)
  • 提交事务(commit)
  • SET AUTOCOMMIT:禁用或启用事务的自动提交模式

注意

  1. 当执行 DML 语句是其实就是开启一个事务 ,事务只对 DML 有效果
  2. 事务的回滚只能回滚 insert、delete 和 update 语句,不能回滚 select(回滚 select 没有任何意义),对于 create、drop、alter 这些无法回滚。
  3. rollback,或者 commit 后事务就结束了。

四、事务的隔离级别

1. 四个隔离级别

​ 事务的隔离级别决定了事务之间可见的级别。 InnoDB 实现了四个隔离级别,用以控制事务所做的修改,并将修改通告至其它并发的事务:

(1)读未提交(READ UMCOMMITTED)

​ 允许一个事务可以看到其他事务未提交的修改。

(2)读已提交(READ COMMITTED)

​ 允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。

(3)可重复读(REPEATABLE READ)

​ 确保如果在一个事务中执行两次相同的 SELECT 语句,都能得到相同的结果,不管其他事务是否提交这些修改。(银行总账) 该隔离级别为 InnoDB 的缺省设置。

(4)串行化(SERIALIZABLE) 【序列化】

​ 将一个事务与其他事务完全地隔离。

2. 并发事务导致的问题

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

(1)脏读取(Dirty Read)

一个事务处理过程中读取了另一个未提交的事务中的数据,这就出现了脏读取。

例如:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

(2)不可重复读(Non-repeatable Read)

在同一个事务中,同一个读操作对同一个数据的前后两次读取产生了不同的结果,这就是不可重复读。

例如:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

(3)幻像读(Phantom Read)

幻像读是指在同一个事务中以前没有的行,由于其他事务的提交而出现的新行。 幻读是事务非独立执行时发生的一种现象。

例如:系统管理员 A 将数据库中所有学生的成绩从具体分数改为 ABCDE 等级,但是系统管理员 B 就在这个时候插入了一条具体分数的记录,当系统管理员 A 改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

注意:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

3. 隔离级别与一致性问题的关系
隔离级别脏读取不可重复读幻想读
读未提交可能可能可能
读已提交不可能可能可能
可重复读不可能不可能对InnoDB不可能
串行化不可能不可能不可能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真真的是小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值