START TRANSACTION
事务控制
语法
START TRANSACTION; ... COMMIT|ROLLBACK;说明
事务(Transaction)将多条 SQL 打包为一个原子操作:全部成功或全部回滚。使用 START TRANSACTION(或 BEGIN)开启,COMMIT 提交,ROLLBACK 回滚。InnoDB 默认自动提交,开启事务后需显式提交。
参数
START TRANSACTION / BEGIN必填开启一个事务
COMMIT提交事务,持久化所有修改
ROLLBACK回滚事务,撤销所有未提交的修改
SAVEPOINT设置保存点,可部分回滚
示例
基本事务
转账操作:扣款和入款同时成功或同时失败
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;回滚示例
出错时回滚所有操作
START TRANSACTION;
INSERT INTO orders (user_id, amount) VALUES (1, 99.99);
INSERT INTO order_items (order_id, product_id) VALUES (LAST_INSERT_ID(), 5);
-- 如果出错
ROLLBACK;保存点
部分回滚到保存点
START TRANSACTION;
INSERT INTO logs (msg) VALUES ('step1');
SAVEPOINT sp1;
INSERT INTO logs (msg) VALUES ('step2');
ROLLBACK TO SAVEPOINT sp1; -- 撤销 step2,保留 step1
COMMIT;