事务与数据安全
理解事务 ACID、BEGIN/COMMIT/ROLLBACK、并发控制
事务与数据安全
转账时 A 扣钱 B 加钱——如果中间系统崩溃了怎么办?事务保证这两步要么全做要么全不做。
学完本章你将: 理解 ACID、BEGIN/COMMIT/ROLLBACK。
什么是事务
事务是一组不可分割的操作。要么全部执行成功,要么全部撤销——就像没发生过一样。
sql
-- 转账:A 扣 100,B 加 100
BEGIN; -- 开始事务
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交
-- 如果中间出错,ROLLBACK 撤销
ACID 四个特性
| 特性 | 含义 |
|---|---|
| Atomic 原子性 | 要么全成功,要么全失败 |
| Consistent 一致性 | 事务前后数据状态合法 |
| Isolated 隔离性 | 并发事务互不干扰 |
| Durable 持久性 | 提交后数据永久保存 |
回滚
sql
BEGIN;
DELETE FROM users WHERE id = 1;
SELECT * FROM users WHERE id = 1; -- 确认已删
ROLLBACK; -- 还是不要删了,恢复!
SELECT * FROM users WHERE id = 1; -- 数据回来了
⚠️ SQLite 默认每条 SQL 自动提交。使用
BEGIN...COMMIT把多条包在一个事务里。