关于事务(Transaction)的几个概念

本文详细阐述了数据库事务的四大特性:原子性、一致性、隔离性和持久性,并介绍了不同事务隔离级别如何解决脏读、不可重复读及幻读等问题。

事务(Transaction)

原子性(Atomicity)

事务必须是一个不可分割的整体

一致性(Consistency)

执行完数据库操作后,数据不会被破坏. (尤其在数据库领域)
例如:如果从 A 账户转账到 B 账户, A 账户扣了钱,那 B 账户一定有加钱

隔离性(Isolation)

我们必须保证数据库操作之间是“隔离”的(线程之间有时也要做到隔离),彼此之间没有任何干扰

事务隔离级别(Transaction Isolation Level)

要想真正的做到操作之间完全没有任何干扰是很难的,于是乎,每天上班打酱油的数据库专家们,开始动脑筋了,“我们要制定一个规范,让各个数据库厂商都支持我们的规范!”,这个规范就是:事务隔离级别(Transaction Isolation Level)。
事务隔离级别脏读不可重复读幻读
READ_UNCOMMITTED允许允许允许
READ_COMMITTED禁止允许允许
REPEATABLE_READ禁止禁止允许
SERIALIZABLE禁止禁止禁止

持久性(Durability)

当我们执行一条 insert 语句后,数据库必须要保证有一条数据永久地存放在磁盘中

由事务引发的问题

1. 脏读:事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。
2. 不可重复读:事务 A 读取了事务 B 已提交的更改数据。
3. 幻读:事务 A 读取了事务 B 已提交的新增数据。

Spring解决方案

1. PROPAGATION_REQUIRED
2. RROPAGATION_REQUIRES_NEW
3. PROPAGATION_NESTED
4. PROPAGATION_SUPPORTS
5. PROPAGATION_NOT_SUPPORTED
6. PROPAGATION_NEVER
7. PROPAGATION_MANDATORY

事务思维导图

事务管理

### 数据库事务概念 数据库事务是指一组逻辑操作单元,这些操作要么完全执行成功,要么完全不执行。它是一个不可分割的工作单位,用于维护数据库的一致性和完整性[^1]。 在数据库管理系统的上下文中,事务通常由一系列SQL语句组成,它们共同完成一项业务功能。例如,在银行转账场景中,扣款和存款两个操作必须作为一个整体来处理——如果其中一个失败,则整个过程应被撤销以保持数据一致性。 --- ### ACID特性的详细解释 #### 1. **原子性 (Atomicity)** 原子性表示事务内的所有操作都是一个不可再分的整体工作单位。这意味着在一个事务中的所有变更只有在该事务成功完成后才会生效;如果有任何一个部分失败,则整个事务会被撤消(Rollback),恢复到初始状态。这种特性可以防止因程序错误或其他异常情况而导致的数据不一致问题[^3]。 ```sql START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; -- 扣款 UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; -- 存款 COMMIT; ``` 在此例子中,如果第一条`UPDATE`语句执行成功而第二条失败,则会触发回滚机制,使两条更新均未发生。 --- #### 2. **一致性 (Consistency)** 一致性确保了任何给定时间点上的数据库都处于有效状态,并满足所有的预定义约束条件、索引规则以及其他属性设置的要求。换句话说就是说每次成功的交易都会把系统带入一个新的合法的状态之中。 这不仅涉及单个交易内部的变化是否符合预期目标,还包括跨多个表之间关系维持正确无误等方面的内容。比如上面提到过的账户余额转移过程中就需要保证总金额不变这一原则得到遵循。 --- #### 3. **隔离性 (Isolation)** 隔离性意味着即使存在并发访问的情况下,不同用户的活动也不会相互干扰。具体来说就是在同一时刻只有一个用户能够看到并修改特定资源实例直到另一个请求结束为止[^2]。 实现良好的隔离度可以通过多种方式达成,其中包括但不限于加锁策略或者MVCC(多版本并发控制)技术等等方法论的应用实践当中去寻找解决方案吧! 以下是几种常见的隔离级别: | 隔离级别 | 描述 | |------------------|----------------------------------------------------------------------| | READ UNCOMMITTED | 可能会出现幻读、不可重复读以及脏读等问题 | | READ COMMITTED | 解决了脏读现象 | | REPEATABLE READ | 进一步解决了不可重复读 | | SERIALIZABLE | 提供最高级别的隔离程度 | 每种等级都有各自适用范围及优缺点权衡考量因素在里面哦~ --- #### 4. **持久性 (Durability)** 一旦某个事务完成了它的提交动作之后,那么即便此时发生了诸如断电之类的灾难事件也依然不会影响已经保存下来的结果记录的真实性可靠性方面表现良好才行呢😊所以这就要求我们的DBMS软件产品本身具备完善的日志记录功能以便于能够在必要时候重新构建丢失的信息内容出来呀~[^4] 简单来讲就是指当客户端收到通知表明某项任务已完成之时起往后无论遇到什么突发状况都不会改变这个事实啦😎 --- ### 总结 综上所述我们可以看出ACID四要素对于保障现代信息系统正常运转起到了至关重要的作用💪通过合理配置参数选项还可以进一步优化性能指标达到最佳效果哟🎉
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值