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存储过程中使用事务,这是数据库操作中确保数据一致性的重要机制。 首先,我们来看创建存储过程的代码。存储过程名为`createBusiness`,接受一个整数参数`parameter1`。在存储过程的主体中...
在MySQL数据库管理中,有时我们需要从data文件夹中恢复数据和存储过程。这种情况可能出现在多种场景下,例如:误删除了重要的数据库对象、数据库出现故障需要紧急恢复等。本文将详细介绍如何通过MySQL的data文件夹来...
通过学习本文档,读者可以全面了解MySQL存储过程的基本概念、应用场景以及最佳实践,从而在实际项目中充分利用这一强大工具。 #### 关于MySQL MySQL是一款广泛使用的开源关系型数据库管理系统,以其高性能、稳定性...
例如,当我们将A表中的100条数据导入B表,然后删除A表中的对应数据,如果这个过程在一个事务中进行,即使中间出现意外,如系统崩溃,MySQL能够通过回滚事务来恢复到操作开始前的状态,避免数据的不一致。 非事务表...
**事务**是数据库管理系统执行过程中的一系列逻辑操作,这些操作作为一个完整的单元被执行。如果事务内的所有操作都成功完成,则整个事务成功;如果其中一个操作失败,则整个事务都会被回滚,以确保数据的一致性和...
MySQL中如何实现事务? 事务是MySQL中一组操作的集合,这些操作要么全部执行成功,要么全部回滚。MySQL通过使用ACID(原子性、一致性、隔离性和持久性)来保证事务的正确性。 5. 什么是视图?MySQL中如何创建视图?...
MySQL存储过程调试技巧是数据库开发中的重要技能,尤其对于MySQL这种广泛应用的关系型数据库。MySQL存储过程允许开发者封装复杂的逻辑操作,提升数据处理的效率。然而,由于存储过程的特性,调试过程中可能会遇到...
### MySQL存储过程:批量操作的高效利器 #### 一、MySQL概述 MySQL 是一个非常流行的开源关系型数据库管理系统(RDBMS),它以其强大的功能、可靠性和灵活性在Web应用程序领域中占据着重要的地位。MySQL 基于结构...
这份"MySQL学习笔记"包含了作者在学习过程中遇到的问题及解决方法,对于初学者或有经验的开发者来说都是宝贵的资源。下面,我们将深入探讨MySQL的一些核心概念和常见问题。 1. 数据库与表: MySQL中的数据库是一个...
总结来说,`DECLARE EXIT HANDLER FOR SQLEXCEPTION`是MySQL存储过程中处理错误和异常的关键工具。它使得我们能够优雅地处理可能出现的问题,确保即使在异常情况下,程序也能按照预定的方式进行操作,从而提升整个...
MySQL存储过程中的ERROR Handler是用于异常处理的关键机制,它允许开发者在遇到错误时进行定制化的响应,而不是让整个过程崩溃。在存储过程中,错误处理通常涉及声明一个或多个HANDLER,这些HANDLER会在特定错误发生...
3. **回滚事务**:`ROLLBACK`,如果事务中有任何SQL语句执行失败,或者遇到错误,可以使用此命令撤销自上一次提交或事务开始以来的所有更改。 #### 三、事务的基本原理 在MySQL中,如果不显式地开启事务,每执行一...
MySQL存储过程中的错误处理是确保程序稳定性和可靠性的重要部分。在存储过程中,错误处理允许开发者预定义当特定错误出现时的响应方式,从而避免程序意外中断或者数据损坏。本篇文章将详细阐述如何在MySQL中进行存储...
MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预编译一组SQL语句并存储在数据库中,以便后续调用。存储过程提高了代码的复用性,减少了网络传输,提升了数据库系统的性能和安全性。 在MySQL 5.0...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
MySQL 5.1是MySQL数据库管理系统的一个重要...这个CHM版的帮助文档,无论对于初学者还是经验丰富的开发者,都是一个值得参考的工具,通过查阅其中的详细讲解,可以解决开发过程中遇到的问题,加深对MySQL操作的理解。