MST
星途 面试题库

面试题:MySQL中如何实现事务的回滚与提交?

在MySQL中,详细描述事务回滚(ROLLBACK)和提交(COMMIT)操作的使用场景及语法,并举例说明一个包含多个SQL语句的事务,如何根据业务需求进行回滚或提交。
40.9万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

事务回滚(ROLLBACK)

  1. 使用场景:当事务中的某一个操作出现错误,或者业务逻辑判断需要放弃当前事务中已执行的所有操作时,使用回滚操作。例如,在转账操作中,从账户A向账户B转账,如果扣除账户A金额成功,但在增加账户B金额时出现错误,此时就需要回滚整个事务,保证账户A金额不被扣除。
  2. 语法ROLLBACK;

事务提交(COMMIT)

  1. 使用场景:当事务中的所有操作都成功执行,并且满足业务逻辑要求,需要将这些操作对数据库所做的修改永久保存时,使用提交操作。例如,在完成一个订单的所有操作(包括插入订单记录、更新库存等)后,确认无误,提交事务使这些操作生效。
  2. 语法COMMIT;

示例

假设存在两个表accounts(包含idbalance字段),以下是一个转账的事务示例:

-- 开启事务
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;