MySQL 通过事件备份数据库表-包含数据、结构、主键、索引

-- 说明:
-- 1. 仅复制表结构:create table my_table_copy2 like my_table;
-- 2. 复制表结构和数据:create table my_table_copy1 select * from my_table; -- 只是按select语句执行的结果新建表,并不会复制表的主键、索引等信息
-- 3. 完全复制表:
-- create table my_table_copy2 like my_table;
-- insert into my_table_copy2 select * from my_table;
-- 4. 复制表,同时重新定义字段名:
-- create table my_table_copy3
-- select id,username yhm,realname xm,email dzyj,address dz from my_table;
-- 5. 复制表,同时定义字段信息:
-- create table my_table_copy4
-- (
-- id INTEGER not null auto_increment PRIMARY KEY
-- )
-- select * from my_table;
-- 打开查询执行 SET GLOBAL event_scheduler = ON; 开启事件

-- 查询事件状态:show variables like "event_scheduler" ;

BEGIN

-- 时间格式Format
set @v_bak = (DATE_FORMAT(CURRENT_DATE(),'%Y%m%d'));
-- 字符串拼接
SET @newTableName = CONCAT('expresspackage_',@v_bak,'bak');

-- 1.创建备份表
SET @sql_stmt_ins1=CONCAT('CREATE TABLE ', @newTableName , ' like expresspackage;');
-- 1.3预处理需要执行的动态SQL
PREPARE stmt_ins1 FROM @sql_stmt_ins1;
-- 执行SQL语句
EXECUTE stmt_ins1;
-- 释放掉预处理段
DEALLOCATE PREPARE stmt_ins1;

-- 1.2备份表数据
SET @sql_stmt_ins1s=CONCAT('insert into ', @newTableName, ' select * from expresspackage;');
-- 1.3预处理需要执行的动态SQL
PREPARE stmt_ins1s FROM @sql_stmt_ins1s;
-- 执行SQL语句
EXECUTE stmt_ins1s;
-- 释放掉预处理段
DEALLOCATE PREPARE stmt_ins1s;

-- 更新表内某个字段
update expresspackage
set CreateTime = REPLACE(CreateTime,DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY),'%Y-%m-%d'),DATE_FORMAT(CURRENT_DATE(),'%Y-%m-%d')) WHERE ID in
(SELECT ID from
(
SELECT id from expresspackage where CreateTime < DATE_FORMAT(CURRENT_DATE(),'%Y-%m-%d')
) as a
)
;

END

posted @ 2019-12-02 16:35  剑存古风  阅读(799)  评论(0编辑  收藏  举报