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; 开启事件

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值