事务的ACID
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001
事务的ACID
事务的 ACID 属性是数据库事务正确处理的四个基本要素,确保了数据库事务是可靠的。
1. 什么是 ACID?
ACID 是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)的缩写,它们分别描述了事务的四个基本特性。
2. 为什么需要 ACID?
ACID 属性保证了即使在系统故障或多个事务并发执行的情况下,数据库事务也能可靠地执行,保证数据的正确性和稳定性。
3. ACID 的实现原理?
3.1 原子性(Atomicity)
原子性确保事务中的操作要么全部完成,要么全部不做。它是通过数据库系统的事务日志来实现的。如果事务失败,系统将利用日志来回滚所有操作,恢复到事务开始之前的状态。
实现机制:
使用开始事务(START TRANSACTION)和结束事务(COMMIT/ROLLBACK)指令来定义事务的边界。
在执行过程中,所有变更都记录在事务日志中。
如果事务执行失败或调用了 ROLLBACK,系统将利用事务日志来撤销所有已执行的操作。
3.2 一致性(Consistency)
一致性指事务将数据库从一个一致的状态转移到另一个一致的状态。数据库的一致性规则包括数据库的约束、触发器、级联操作等。
实现机制:
数据库系统会在事务执行前后进行一致性检查。
在事务开始之前,它会检查诸如数据类型、约束等的一致性。
事务执行过程中,如果违反了一致性规则,则事务会被中止。
3.3 隔离性(Isolation)
隔离性是指当多个用户并发访问数据库时,数据库系统能够使每个用户感觉不到其他用户在操作数据库。
实现机制:
使用锁机制,如行锁或表锁,以及乐观锁和悲观锁。
通过 MVCC(多版本并发控制)来允许读取操作不被写入操作阻塞。
定义不同的事务隔离级别,如读未提交、读提交、可重复读、串行化,以平衡隔离性和并发性。
3.4 持久性(Durability)
持久性确保一旦事务提交,则其所做的更改就会永久保存在数据库中。即使发生系统故障,如断电或崩溃,更改也不会丢失。
实现机制:
所有事务操作的结果都会写入到非易失存储器中,如硬盘。
使用 Redo 日志和 Undo 日志来保证事务的持久性。即使在事务提交后系统崩溃,重启时也能通过日志重建事务的状态。
4. 事务的使用示例
5. 事务的优点
可靠性:事务的 ACID 属性保证了即使在系统发生故障时,数据的完整性和一致性也不会受到影响。
并发控制:事务通过隔离性保证了并发操作的正确性,防止了诸如脏读、不可重复读和幻读等问题。
数据恢复:在事务失败时,可以通过回滚操作来恢复数据,保证数据不会处于中间状态。
6. 事务的缺点
性能开销:事务的管理需要额外的资源,如日志记录和锁管理,这可能会对系统性能产生影响。
复杂性:正确管理事务需要仔细设计,尤其是在高并发的系统中,复杂的锁策略和隔离级别可能会导致难以预料的问题。
7. 事务的使用注意事项
避免过长的事务:长事务会占用系统资源较长时间,增加死锁的可能性,应尽量分解为多个小事务执行。
合理选择隔离级别:根据应用场景选择合适的隔离级别,以平衡性能和数据一致性的需求。
谨慎操作:在事务中执行的操作应该是可预测的,避免复杂的查询和大批量操作,这些可能会导致性能问题。
8. 总结
事务的 ACID 属性是确保数据库操作可靠性的关键。每个属性都有其重要性和实现机制。在设计和开发数据库应用时,了解和正确应用这些属性是至关重要的。
最后更新于