本文共 970 字,大约阅读时间需要 3 分钟。
在数据库管理系统中,事务的核心特性是ACID原子性、一致性、隔离性和持久性。这些特性确保了数据库操作的完整性和一致性,是关系型数据库管理的基石。
一致性是指事务执行前后,数据库的完整性和一致性得以保持。它分为约束一致性和数据一致性两部分。
约束一致性主要体现在数据库中定义的外键约束、唯一索引等。这些约束机制确保了数据的合理性和完整性。在MySQL中,外键约束和唯一索引是主要的约束手段,而Check约束则不支持。
数据一致性则是由事务的原子性、隔离性和持久性共同保证的结果。它确保了在任何情况下,数据库中的数据状态都不会出现不一致的情况。
原子性要求所有操作要么全部成功,要么全部失败。在MySQL中,这通过Write Ahead Log(WAL)技术实现。WAL确保了事务的写入操作先记录到日志,再写入数据存储,防止数据不一致的出现。
举例来说,当事务提交时,未刷盘的脏页会被刷到磁盘,依赖Redo日志来恢复。若系统崩溃,Redo日志会将未写入数据恢复,确保事务的原子性。
隔离性确保了一个事务对其他事务不可见,避免并发操作的干扰。常见的隔离机制包括锁和MVCC。
锁机制通过独占访问保证隔离性,例如在RR隔离级别下,使用Gap锁防止幻读。但这种锁机制可能引发死锁和并发性能问题。
MVCC(多版本控制)通过版本控制和事务可见性实现隔离性。每次修改记录事务版本及旧数据存储位置,读事务可根据版本查看正确的数据版本,提升并发性能。
持久性要求事务提交后,数据修改永久生效。MySQL通过Redo日志和存储引擎的刷盘机制实现这一点。Redo日志先记录事务操作,存储引擎刷盘后,数据持久化。即使系统故障,通过日志恢复,数据仍可保留。
并发控制主要通过锁和MVCC实现。锁机制通过独占方式提升事务隔离,MVCC通过版本控制提升并发性能。
InnoDB支持四种隔离级别:读未提交、读提交、可重复读和可串行化。其中,RR通过Gap锁解决幻读,提升安全性但降低并发度。可串行化则通过锁机制实现,提升一致性但并发能力较弱。
数据库完整性由ACID特性共同保证。约束一致性依赖于外键、唯一索引等技术,数据一致性则由事务特性和Redo/Undo日志实现。
转载地址:http://kabfk.baihongyu.com/