主题切换
MySQL事务特性(ACID)笔记
一、事务的定义
事务是一组操作的集合,是一个不可分割的工作单位。事务会将所有操作作为一个整体,要么全部提交成功,要么全部撤销失败,不存在部分执行的状态。
典型场景:转账操作(张三向李四转账1000元),包含两个操作:
- 张三账户余额减少1000元
- 李四账户余额增加1000元 这两个操作必须同时成功或同时失败,否则会导致数据不一致。
二、事务的四大特性(ACID)
1. 原子性(Atomicity)
事务是不可分割的最小操作单元,所有操作要么全部执行成功,要么全部执行失败并回滚。
- 转账场景:如果扣款成功但收款失败,事务会回滚扣款操作,恢复张三账户余额。
2. 一致性(Consistency)
事务执行前后,数据库中的数据必须保持一致状态,所有约束(如余额非负、总金额不变)必须满足。
- 转账场景:转账前后,张三和李四的账户总金额保持不变(2000+2000=1000+3000),且余额均不为负。
3. 隔离性(Isolation)
数据库提供隔离机制,保证事务在不受外部并发操作影响的独立环境下运行,避免多个事务同时操作同一数据时出现数据混乱。
- 转账场景:当多个事务同时操作同一账户时,隔离性确保每个事务的操作相互隔离,不会出现并发问题。
4. 持久性(Durability)
事务一旦提交或回滚,它对数据库数据的改变就是永久的,即使数据库崩溃,数据状态也不会丢失。
- 转账场景:事务提交后,张三和李四的账户余额变化会永久保存到数据库中,后续故障不会影响该结果。
面试相关问题
问:什么是事务?它的核心作用是什么? 答:事务是一组不可分割的操作集合,核心作用是保证数据的一致性,确保多个关联操作要么全部成功,要么全部失败。
问:事务的四大特性(ACID)分别是什么?请简要说明。 答:原子性(操作不可分割,要么全成要么全败)、一致性(数据状态前后一致)、隔离性(并发操作相互隔离)、持久性(提交后数据永久生效)。
问:原子性和一致性的区别是什么? 答:原子性关注操作的执行完整性,一致性关注数据的状态完整性。原子性是实现一致性的基础,事务通过原子性操作来保证数据最终的一致性。
问:为什么需要事务的隔离性?如果没有隔离性会出现什么问题? 答:隔离性用于避免并发事务操作同一数据时出现数据混乱,如脏读、不可重复读、幻读等问题,保证事务在独立环境下运行。
问:持久性是如何实现的? 答:通过数据库的日志机制(如redo log、undo log)实现,事务提交后,数据修改会写入持久化存储,即使数据库崩溃,也能通过日志恢复数据状态。