[MySQL] MySQL存储过程 事务transaction 数据表重建
2024-09-03 14:37:18
直接上代码
-- 删除存储过程
DROP PROCEDURE IF EXISTS `renew_message_queue`; -- 添加; 的转义
DELIMITER ;; CREATE PROCEDURE `renew_message_queue`()
BEGIN -- 旧表备份的后缀
DECLARE old_table_suffix VARCHAR(8) DEFAULT DATE_FORMAT(NOW(), '%Y%m%d'); -- 事务标记
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @t_error=1; START TRANSACTION;
-- 创建表
CREATE TABLE `ecm_message_queue_new` LIKE `ecm_message_queue`; -- 备份旧表
SET @back_table_sql = CONCAT('ALTER TABLE ecm_message_queue RENAME TO ecm_message_queue_bak_', old_table_suffix);
-- 执行动态生成的sql语句
PREPARE temp FROM @back_table_sql;
EXECUTE temp; -- 重命名新表
ALTER TABLE ecm_message_queue_new RENAME TO ecm_message_queue; -- 将未处理的数据迁移到新表
SET @move_data_sql = CONCAT('INSERT INTO `ecm_message_queue` SELECT * FROM ecm_message_queue_bak_', old_table_suffix, ' WHERE send_status = 0');
-- 执行动态生成的sql语句
PREPARE temp FROM @move_data_sql;
EXECUTE temp; IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF; -- 返回标识位的结果集,可不执行
-- select t_error; END;
;;
DELIMITER ; CALL `renew_message_queue`();
Have fun with MySQL!
最新文章
- java 解析并生成 XML
- JSONP跨域的原理解析( 一种脚本注入行为)
- 正常月报表年初未分配利润修改backup
- [转载]在iTOP-4412开发板上调试helloworld应用
- mysql高可用方案总结性说明
- C# TcpListener的编程要点
- 添加标签2 jquery 和JS
- Windows文件居然有解锁一说,并且还会引起SignTool Error,真是昏倒!
- java 汉字转拼音
- Ninject的项目情况
- Python3实现简单的http server
- php的laravel框架使用心得
- 【BZOJ3530】数数(AC自动机,动态规划)
- Choosing The Commander CodeForces - 817E (01字典树+思维)
- 更改 centos 7的源为 阿里源
- 究竟 javascript 错误处理有哪些类型?
- C# sqlserver ExecuteNonQuery()方法详解
- SICP读书笔记 1.1
- Eloquent 条件查询——tucker-eric/eloquentfilter 笔记
- nginx.conf_2017-11-24
热门文章
- 使用idea创建项目如何忽略iml文件
- [图解]Windows下使用Zend Studio 10和XAMPP 1.8搭建开发环境,ZendFramework 2 HelloWorld
- qt 静态库中貌似不能使用静态属性
- linux 查看硬盘使用情况
- podium服务器端的微前端开发框架
- 你真的知道Java中boolean类型占用多少个字节吗?
- python 判断元素是否在一个列表中
- SpringCloud:搭建基于Gateway的微服务网关(一)
- Nginx目录文件列表显示
- <;每日 1 OJ>; -LeetCode 28. 实现 strStr()