事务处理
事务是一组 SQL 操作,要么全部成功,要么全部失败。本章介绍事务的使用。
ACID 特性
- 原子性(Atomicity):全部成功或全部失败
- 一致性(Consistency):数据保持一致状态
- 隔离性(Isolation):事务之间相互隔离
- 持久性(Durability):提交后永久保存
基本语法
sql
-- 开始事务
START TRANSACTION;
-- 或
BEGIN;
-- 执行 SQL 操作
INSERT INTO users (name) VALUES ('Zhang San');
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 提交事务
COMMIT;
-- 或回滚事务
ROLLBACK;转账示例
sql
START TRANSACTION;
-- 从账户 A 扣款
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;
-- 向账户 B 加款
UPDATE accounts
SET balance = balance + 100
WHERE id = 2;
-- 检查余额
IF (SELECT balance FROM accounts WHERE id = 1) >= 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;隔离级别
sql
-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 隔离级别:
-- READ UNCOMMITTED - 读未提交
-- READ COMMITTED - 读已提交
-- REPEATABLE READ - 可重复读(MySQL 默认)
-- SERIALIZABLE - 串行化保存点
sql
START TRANSACTION;
INSERT INTO users (name) VALUES ('User 1');
SAVEPOINT sp1;
INSERT INTO users (name) VALUES ('User 2');
SAVEPOINT sp2;
-- 回滚到保存点
ROLLBACK TO sp1;
COMMIT;最佳实践
- 保持事务简短
- 避免用户交互
- 合理设置隔离级别
- 处理死锁
- 使用索引减少锁定
小结
- 事务保证数据一致性
- ACID 特性
- BEGIN/COMMIT/ROLLBACK
- 隔离级别
- 保存点
下一步: 学习 DATABASE-DESIGN 数据库设计