mysql定时创建MERGE分表
2016-03-28 17:39
344 查看
-- 建分表
DROP TABLE IF EXISTS `alldata_20160328`;
CREATE TABLE `alldata_20160328`(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
address VARCHAR(100),
phone VARCHAR(20)
)CHARSET=utf8 ENGINE=MYISAM;
-- 建总表
DROP TABLE IF EXISTS `alldata`;
CREATE TABLE `alldata`(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
address VARCHAR(100),
phone VARCHAR(20)
)CHARSET=utf8 ENGINE=MERGE UNION(alldata_20160328) INSERT_METHOD=LAST;
-- 创建存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS createTable_pro $$
CREATE PROCEDURE createTable_pro()
BEGIN
DECLARE oldnames TEXT;
DECLARE newname VARCHAR(100);
DECLARE createtable VARCHAR(200);
DECLARE altertable TEXT;
SELECT GROUP_CONCAT(TABLE_NAME) INTO oldnames FROM INFORMATION_SCHEMA.TABLES WHERE table_name LIKE 'alldata_%';
SET newname = CONCAT('alldata_',DATE_FORMAT(NOW(),'%Y%m%d%H%i'));
SET oldnames = CONCAT(oldnames,',',newname);
SET createtable = CONCAT('CREATE TABLE ',newname,' LIKE alldata_20160328;');
SET altertable = CONCAT('ALTER TABLE alldata UNION=(',oldnames,')');
SET @sql = createtable;
PREPARE stmt FROM @sql;
EXECUTE stmt;
SET @sql = altertable;
PREPARE stmt FROM @sql;
EXECUTE stmt;
END$$
DELIMITER ;
-- 创建定时器 从现在开始每分钟执行一次
/*
-- 定时器默认关闭
SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态
SET GLOBAL event_scheduler = 1; -- 启动定时器
-- SET GLOBAL event_scheduler = 0; -- 停止定时器
*/
DROP EVENT IF EXISTS test_event;
CREATE EVENT IF NOT EXISTS test_event
ON SCHEDULE EVERY 1 MINUTE STARTS NOW()
ON COMPLETION PRESERVE
DO CALL createTable_pro;
DROP TABLE IF EXISTS `alldata_20160328`;
CREATE TABLE `alldata_20160328`(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
address VARCHAR(100),
phone VARCHAR(20)
)CHARSET=utf8 ENGINE=MYISAM;
-- 建总表
DROP TABLE IF EXISTS `alldata`;
CREATE TABLE `alldata`(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
address VARCHAR(100),
phone VARCHAR(20)
)CHARSET=utf8 ENGINE=MERGE UNION(alldata_20160328) INSERT_METHOD=LAST;
-- 创建存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS createTable_pro $$
CREATE PROCEDURE createTable_pro()
BEGIN
DECLARE oldnames TEXT;
DECLARE newname VARCHAR(100);
DECLARE createtable VARCHAR(200);
DECLARE altertable TEXT;
SELECT GROUP_CONCAT(TABLE_NAME) INTO oldnames FROM INFORMATION_SCHEMA.TABLES WHERE table_name LIKE 'alldata_%';
SET newname = CONCAT('alldata_',DATE_FORMAT(NOW(),'%Y%m%d%H%i'));
SET oldnames = CONCAT(oldnames,',',newname);
SET createtable = CONCAT('CREATE TABLE ',newname,' LIKE alldata_20160328;');
SET altertable = CONCAT('ALTER TABLE alldata UNION=(',oldnames,')');
SET @sql = createtable;
PREPARE stmt FROM @sql;
EXECUTE stmt;
SET @sql = altertable;
PREPARE stmt FROM @sql;
EXECUTE stmt;
END$$
DELIMITER ;
-- 创建定时器 从现在开始每分钟执行一次
/*
-- 定时器默认关闭
SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态
SET GLOBAL event_scheduler = 1; -- 启动定时器
-- SET GLOBAL event_scheduler = 0; -- 停止定时器
*/
DROP EVENT IF EXISTS test_event;
CREATE EVENT IF NOT EXISTS test_event
ON SCHEDULE EVERY 1 MINUTE STARTS NOW()
ON COMPLETION PRESERVE
DO CALL createTable_pro;
相关文章推荐
- 小白求解C环境的问题
- 如何利用脚本实现MySQL的快速部署以及一机多实例的部署
- mysql优化-- int类型解析及其优化
- 无法远程访问 MySQL
- MySQL 数据表创建详细SQL语法
- 解决MySql Error Code: 2006 – MySQL 服务器已离线 错误
- MySQL数据库相关操作
- 安装完Mysql,mysql -u root -p出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pass
- MYSQL order by排序与索引关系总结
- 常见的mysql进程state
- MySQL数据库的环境配置和基本操作windows
- 正文字体大小:大 中 小 解决configure: error: Cannot find libmysqlclient under /usr
- 如何在windowns终端用命令对mysql进行导入导出
- mysql配置的讲解 mysql的root密码重置 mysql的登录
- MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
- 安装MySQL在最后的start service停住了解决方法
- Mysql 修改密码
- MySQL备份学习
- Mysql支持的数据类型(总结)
- MySQL允许远程访问的设置