mysql定时创建MERGE分表

-- 建分表
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;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值