mysql存储过程中遇到的事务问题?

exe_loop:LOOP
START TRANSACTION ;
SET autocommit = 0;
IF(rowcount > 0 AND batch_times <= execute_times ) THEN
-- 一批批地取要迁移的数据,暂时放进临时表
INSERT INTO temp_charge_ticket_error SELECT * FROM test LIMIT limit_affect_records;
-- 从临时表取数据迁移到对应的备份库表
INSERT INTO bak_boss.test SELECT * FROM temp_charge_ticket_error ;
-- 删除原表的数据,根据临时表的记录
DELETE FROM test WHERE id IN (SELECT id FROM temp_charge_ticket_error );
IF(batch_times = 0) THEN
INSERT INTO bak_boss.test(id,NAME) VALUES(NULL,'dddd');
END IF;
-- 清空临时表的数据
#TRUNCATE TABLE temp_charge_ticket_error; -- 一定要去掉这个,不能放事务里,否则造成事务提交不回滚
IF t_error = 1 THEN
ROLLBACK;
SET t_error = 0;
SET error_times = error_times + 1;
ELSE
TRUNCATE TABLE temp_charge_ticket_error; -- 一定要放在这个位置,否则造成出错事务无法回滚
COMMIT;
END IF;
SET batch_times = batch_times + 1;
ELSE
LEAVE exe_loop;
END IF;
END LOOP exe_loop;


问题描述:因为这里涉及到跨库表的操作,所以就用到事务,让所有的操作都在同一个事务里。但是很奇怪的事情出现了,这句SQL代码TRUNCATE TABLE temp_charge_ticket_error 放在上面的第一个位置时,会出现事务回滚不了,如果所以最后,也就是commit前面,事务就可以顺利地回滚。百思不得其解。特记录这个错误下来。如果有哪位高人,看到了,知道个原因的,麻烦解答下。谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值