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前面,事务就可以顺利地回滚。百思不得其解。特记录这个错误下来。如果有哪位高人,看到了,知道个原因的,麻烦解答下。谢谢!

你可能感兴趣的:(mysql,SQL事务问题)