您的位置:首页 > 数据库 > MySQL

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

2020-07-15 05:21 537 查看

-- 说明:
-- 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: