事务的四大特性:ACID详解
什么是事务? 事务(Transaction) 是数据库操作的最小工作单元,是一组不可分割的SQL语句集合。 -- 转账场景:A向B转账100元 START TRANSACTION; UPDATE account SET balance = balance - 100 WHERE user_id = 'A'; UPDATE account SET balance = balance + 100 WHERE user_id = 'B'; COMMIT; ACID四大特性 1. 原子性(Atomicity) 定义:事务是不可分割的最小单元,要么全部成功,要么全部失败回滚。 实现机制:undo log(回滚日志) 每次修改前,记录原始值到undo log 回滚时,读取undo log恢复数据 -- 示例:转账失败自动回滚 START TRANSACTION; UPDATE account SET balance = balance - 100 WHERE user_id = 'A'; -- 成功 UPDATE account SET balance = balance + 100 WHERE user_id = 'B'; -- 失败(余额不足) ROLLBACK; -- 自动回滚,A的余额恢复 应用场景: 订单支付(扣库存 + 创建订单 + 扣款) 批量数据导入(全部成功或全部失败) 2. 一致性(Consistency) 定义:事务执行前后,数据库从一个一致性状态转换到另一个一致性状态。 一致性约束: 数据完整性约束:主键、外键、唯一索引 业务规则约束:账户余额>=0,库存>=0 应用层约束:总金额守恒 -- 转账前:A有1000,B有500,总额1500 -- 转账后:A有900,B有600,总额仍是1500 -- 违反一致性的例子 UPDATE account SET balance = balance - 100 WHERE user_id = 'A'; -- 如果这里系统崩溃,没有执行下一条,总额变成1400,违反一致性 UPDATE account SET balance = balance + 100 WHERE user_id = 'B'; 如何保证一致性? ...