项目04(Mysql添加旬表02)

背景

承接上文,本篇介绍创建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月,如果您的使用时间不同,只需更改语句中的时间字段

本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删

猜你喜欢

转载自blog.csdn.net/baidu_34007305/article/details/110875322