事务处理
作用
flowchart TD
    A[开始事务]
    B[执行SQL操作1]
    C[执行SQL操作2]
    D{所有操作成功?}
    E[提交事务]
    F[结束]
    A --> B
    B --> C
    C --> D
    D -->|否| B
    D -->|是| E
    E --> F
本质
保证数据库操作要么全部成功,要么全部失败的机制
ACID特性
| 特性 | 说明 | 
|---|---|
| 原子性(Atomicity) | 事务是不可分割的工作单位 | 
| 一致性(Consistency) | 事务执行前后数据库状态一致 | 
| 隔离性(Isolation) | 并发事务互不干扰 | 
| 持久性(Durability) | 事务提交后改变永久有效 | 
示例
-- 银行转账事务示例
BEGIN TRANSACTION;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  -- 检查余额是否充足
  IF (SELECT balance FROM accounts WHERE id = 1) < 0 THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF
注意事项
- 事务隔离级别选择:
 - READ UNCOMMITTED: 可能脏读
 - READ COMMITTED: 避免脏读
 - REPEATABLE READ: 避免不可重复读
 - SERIALIZABLE: 最高隔离级别
 - 长时间运行的事务会降低并发性能
 - 死锁是多个事务互相等待导致的