背景
承接上文,本篇介绍创建mysql旬表的内容,使用存储过程
写在前面
使用之前,请测试多次。并且修改对应的内容,使其符合您的实际需要
每月3张
主要是对变量 i 表示的是月份,需要替换表结构和表名
DELIMITER $$
CREATE PROCEDURE create_table()
BEGIN
declare i int;
set i=1;
while i<=12 do
set @sql_create_table_gpstrail01 = concat(concat(
'CREATE TABLE IF NOT EXISTS page_view_log_', date_format(date_add(curdate(), interval i month),'%Y%m'),'_1',
"(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键,自增ID',
`Time` int(10) unsigned NOT NULL COMMENT '访问时间',
`PageId` int(4) unsigned NOT NULL COMMENT '页面id',
`ViewIP` bigint(20) unsigned NOT NULL COMMENT '整型后的IP',
PRIMARY KEY (`id`),
KEY `Page` (`PageId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
"));
set @sql_create_table_gpstrail02 = concat(concat(
'CREATE TABLE IF NOT EXISTS page_view_log_', date_format(date_add(curdate(), interval i month),'%Y%m'),'_2',
"(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键,自增ID',
`Time` int(10) unsigned NOT NULL COMMENT '访问时间',
`PageId` int(4) unsigned NOT NULL COMMENT '页面id',
`ViewIP` bigint(20) unsigned NOT NULL COMMENT '整型后的IP',
PRIMARY KEY (`id`),
KEY `Page` (`PageId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
"));
set @sql_create_table_gpstrail03 = concat(concat(
'CREATE TABLE IF NOT EXISTS page_view_log_', date_format(date_add(curdate(), interval i month),'%Y%m'),'_3',
"(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键,自增ID',
`Time` int(10) unsigned NOT NULL COMMENT '访问时间',
`PageId` int(4) unsigned NOT NULL COMMENT '页面id',
`ViewIP` bigint(20) unsigned NOT NULL COMMENT '整型后的IP',
PRIMARY KEY (`id`),
KEY `Page` (`PageId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
"));
PREPARE sql_create_table_gpstrail01 FROM @sql_create_table_gpstrail01;
PREPARE sql_create_table_gpstrail02 FROM @sql_create_table_gpstrail02;
PREPARE sql_create_table_gpstrail03 FROM @sql_create_table_gpstrail03;
EXECUTE sql_create_table_gpstrail01;
EXECUTE sql_create_table_gpstrail02;
EXECUTE sql_create_table_gpstrail03;
set i=i+1;
end while;
DEALLOCATE PREPARE sql_create_table_gpstrail01;
DEALLOCATE PREPARE sql_create_table_gpstrail02;
DEALLOCATE PREPARE sql_create_table_gpstrail03;
END $$
DELIMITER ;
使用
call create_table();
删除
drop PROCEDURE create_table;
每月1张
DELIMITER $$
CREATE PROCEDURE create_table()
BEGIN
declare i int;
set i=1;
while i<=12 do
set @sql_create_table_gpstrail = concat(
'CREATE TABLE IF NOT EXISTS seat', date_format(date_add(curdate(), interval i month),'%Y%m'),
"(
`id` int(11) DEFAULT NULL,
`student` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
");
PREPARE sql_create_table_gpstrail FROM @sql_create_table_gpstrail;
EXECUTE sql_create_table_gpstrail;
set i=i+1;
end while;
DEALLOCATE PREPARE sql_create_table_gpstrail;
END $$
DELIMITER ;
base表
用于数据搬迁,如果您没有这个需求,可忽略以下内容
12月份添加:
CREATE TABLE `base` (
`id` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
DELIMITER $$
CREATE PROCEDURE insert_table()
BEGIN
declare i int;
set i=1;
while i<=12 do
set @sql_insert_table =concat('insert into base(id)','values(',date_format(date_add(curdate(), interval i month),'%Y%m'),')');
PREPARE sql_insert_table FROM @sql_insert_table;
EXECUTE sql_insert_table;
set i=i+1;
end while;
DEALLOCATE PREPARE sql_insert_table;
END $$
DELIMITER ;
#以上为添加'年月'格式 202101
#'年'格式的insert into base (id) values('2021');
call insert_table();
drop PROCEDURE insert_table;
以上内容,包括上一篇《sql server添加旬表》的执行时间为2020年12月,如果您的使用时间不同,只需更改语句中的时间字段
本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删