面试题答案
一键面试事务回滚(ROLLBACK)
- 使用场景:当事务中的某一个操作出现错误,或者业务逻辑判断需要放弃当前事务中已执行的所有操作时,使用回滚操作。例如,在转账操作中,从账户A向账户B转账,如果扣除账户A金额成功,但在增加账户B金额时出现错误,此时就需要回滚整个事务,保证账户A金额不被扣除。
- 语法:
ROLLBACK;
事务提交(COMMIT)
- 使用场景:当事务中的所有操作都成功执行,并且满足业务逻辑要求,需要将这些操作对数据库所做的修改永久保存时,使用提交操作。例如,在完成一个订单的所有操作(包括插入订单记录、更新库存等)后,确认无误,提交事务使这些操作生效。
- 语法:
COMMIT;
示例
假设存在两个表accounts
(包含id
、balance
字段),以下是一个转账的事务示例:
-- 开启事务
START TRANSACTION;
-- 从账户A(假设id为1)扣除100元
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 向账户B(假设id为2)增加100元
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 假设这里进行业务逻辑判断,比如检查账户A扣除后的余额是否足够
-- 如果余额不足,回滚事务
SELECT balance INTO @a_balance FROM accounts WHERE id = 1;
IF @a_balance < 0 THEN
ROLLBACK;
ELSE
-- 如果余额足够,提交事务
COMMIT;
END IF;