Skip to content

MySQL事务特性(ACID)笔记

一、事务的定义

事务是一组操作的集合,是一个不可分割的工作单位。事务会将所有操作作为一个整体,要么全部提交成功,要么全部撤销失败,不存在部分执行的状态。

典型场景:转账操作(张三向李四转账1000元),包含两个操作:

  1. 张三账户余额减少1000元
  2. 李四账户余额增加1000元 这两个操作必须同时成功或同时失败,否则会导致数据不一致。

二、事务的四大特性(ACID)

1. 原子性(Atomicity)

事务是不可分割的最小操作单元,所有操作要么全部执行成功,要么全部执行失败并回滚。

  • 转账场景:如果扣款成功但收款失败,事务会回滚扣款操作,恢复张三账户余额。

2. 一致性(Consistency)

事务执行前后,数据库中的数据必须保持一致状态,所有约束(如余额非负、总金额不变)必须满足。

  • 转账场景:转账前后,张三和李四的账户总金额保持不变(2000+2000=1000+3000),且余额均不为负。

3. 隔离性(Isolation)

数据库提供隔离机制,保证事务在不受外部并发操作影响的独立环境下运行,避免多个事务同时操作同一数据时出现数据混乱。

  • 转账场景:当多个事务同时操作同一账户时,隔离性确保每个事务的操作相互隔离,不会出现并发问题。

4. 持久性(Durability)

事务一旦提交或回滚,它对数据库数据的改变就是永久的,即使数据库崩溃,数据状态也不会丢失。

  • 转账场景:事务提交后,张三和李四的账户余额变化会永久保存到数据库中,后续故障不会影响该结果。

面试相关问题

  1. 问:什么是事务?它的核心作用是什么? 答:事务是一组不可分割的操作集合,核心作用是保证数据的一致性,确保多个关联操作要么全部成功,要么全部失败。

  2. 问:事务的四大特性(ACID)分别是什么?请简要说明。 答:原子性(操作不可分割,要么全成要么全败)、一致性(数据状态前后一致)、隔离性(并发操作相互隔离)、持久性(提交后数据永久生效)。

  3. 问:原子性和一致性的区别是什么? 答:原子性关注操作的执行完整性,一致性关注数据的状态完整性。原子性是实现一致性的基础,事务通过原子性操作来保证数据最终的一致性。

  4. 问:为什么需要事务的隔离性?如果没有隔离性会出现什么问题? 答:隔离性用于避免并发事务操作同一数据时出现数据混乱,如脏读、不可重复读、幻读等问题,保证事务在独立环境下运行。

  5. 问:持久性是如何实现的? 答:通过数据库的日志机制(如redo log、undo log)实现,事务提交后,数据修改会写入持久化存储,即使数据库崩溃,也能通过日志恢复数据状态。

Powered by VitePress 1.6.4 | 持续更新中