聊一下数据库事务(最近被高频面试)

本文解析了数据库事务的概念,强调了ACID特性(原子性、一致性、隔离性、持久性),并通过转账案例说明其在实际操作中的应用。同时讨论了MySQL如何利用技术如redolog、undolog、MVCC和锁机制来实现事务特性,并介绍了不同隔离级别的优缺点和适用场景。

今天简单记录下关于数据库事务的理解,因为最近被面试高频问道,所以想着吃透它。

什么是事务

要去完全认识数据库事务,得先了解什么是事务

事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败。

举一个简单的例子:比如转账功能,A账户需要给B账户转账,需要进行下面两步:

从 A 账户扣钱。
往 B 账户加入等量的钱。

因为是独立的两个操作,所以可能有一个成功,一个失败的情况。但是因为在这种场景下,不能存在从 A 账户扣钱成功,往 B 账户加入等量钱失败这种情况,要么同时成功,要么同时失败(一个失败需要回滚),即必须要保证事务。

数据库事务与四大特性

什么是数据库事务?

数据库事务(Database Transaction)是指对数据库的一系列操作组成的逻辑工作单元。

并非任意的数据库操作序列都是数据库事务。数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(Transaction)正确可靠,必须具备四个特性:ACID,也就是我们面试经常被问到的ACID,下面详细展开说下:

  • 原子性(Atomicity)
    事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

  • 一致性(Consistency)
    一致性确保事务将数据库从一种一致的状态转换为另一种一致的状态。换句话说,事务在执行前后,数据库必须满足一些预定义的一致性规则,如约束、触发器、级联等。如果事务执行后数据库不满足这些规则,整个事务将被回滚。

  • 隔离性(Isolation)
    多个事务并发执行时,一个事务的执行不影响其他事务的执行。

  • 持久性(Durability)
    已被提交的事务对数据库的修改应该永久保存在数据库中。

还是用我们在第一个事务的举例来解释一下这四大特性吧,A账户要往B账户进行转账,我们可以分步进行分析,需要以下六个步骤:

1 从 A 账户中把余额读出来(500)
2 对 A 账户做减法操作(500-100)
3 把结果写回 A 账号中(400)
4 从 B账户中把余额读出来(500)
5 对 B 账户做加法操作(500+100)
6 把结果写回 B 账户中(600)

  • 原子性:保证1-6所有过程要么都执行,要么都不执行。一旦在执行某一步骤的过程中发生问题,就需要执行回滚操作。 假如执行到第五步的时候,B账户突然不可用(比如被注销),那么之前的所有操作都应该回滚到执行事务之前的状态。

  • 一致性:在转账之前,A和B的账户中共有500+500=1000元钱。在转账之后,A和B的账户中共有400+600=1000元。也就是说,数据的状态在执行该事务操作之后从一个状态改变到了另外一个状态,两个状态数据总额是一致的,不能凭空变多或变少。

  • 隔离

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值