MySQL事务的四大特性ACID

目录

一、原子性(Atomicity)

二、一致性(Consistency)

三、隔离性(Isolation)

四、持久性(Durability)


MySQL事务的四大特性ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),是确保数据准确性和可靠性的关键所在。

一、原子性(Atomicity)

原子性是指事务是一个不可分割的最小工作单元,事务中的操作要么全部执行成功,要么全部失败回滚。在MySQL中,这主要通过redo日志和undo日志来实现。

  • redo日志:记录事务执行的变更,当事务提交时,redo日志将变更应用到数据库,确保事务的修改被持久化。
  • undo日志:记录事务执行前的状态,用于在事务失败时进行回滚,保证数据库状态恢复到事务开始前的状态。

二、一致性(Consistency)

一致性是指事务执行前后,数据库的状态必须保持一致。这包括数据的准确性和完整性。

  • 约束:MySQL允许定义各种约束(如主键约束、外键约束等),这些约束确保数据符合预定义的规则,从而维护数据的一致性。
  • 触发器:在特定事件发生时执行自动操作,以保持数据库的完整性。

三、隔离性(Isolation)

隔离性是指并发事务之间互不影响,一个事务的执行结果对其他并发事务是隔离的。MySQL提供了不同的事务隔离级别来实现这一特性。

  • 读未提交(Read Uncommitted):最低的隔离级别,允许事务读取未被其他事务提交的更改,可能导致脏读。
  • 读提交(Read Committed):允许事务读取并仅读取已经被其他事务提交的更改,避免了脏读,但可能遇到不可重复读的问题。
  • 可重复读(Repeatable Read):确保在同一事务中多次读取同一数据集合时,结果是一致的,避免了不可重复读的问题。MySQL的InnoDB存储引擎默认使用此隔离级别,并通过多版本并发控制(MVCC)机制避免了幻读的问题。
  • 串行化(Serializable):最高的隔离级别,通过强制事务串行执行,避免了脏读、不可重复读和幻读的问题,但性能开销最大。

四、持久性(Durability)

持久性是指一旦事务被提交,其对数据库的修改就是永久性的,即使系统崩溃或出现故障也不会丢失。

  • redo日志:InnoDB存储引擎使用redo日志来保证事务的持久性。当事务被提交时,事务所做的所有修改都会被记录到redo日志中。即使数据库发生崩溃,redo日志也可以在重启后被用来重放这些修改,确保数据的持久性。
  • 二进制日志(Binary Log):MySQL服务器使用二进制日志记录所有修改数据库数据的操作,如INSERT、UPDATE、DELETE等。二进制日志不仅对数据恢复至关重要,也是复制和增量备份的基础。

你可能感兴趣的:(mysql,数据库)