最近由于数据库数据日增长量较大,某些不到一个月已经达到了百万级数据量,根据需要进行散表。后台将每月新数据insert新表,因此数据库要定期创建新表。涉及到了mysql 定时任务等一系列知识。
关于mysql复制表结构创建对应新表,要求是将按月创建新表,新表名为原表名加上日期。如:原表game_center_brow_page_log,新表game_center_brow_page_log_05
思路:用concat函数拼接动态创建表的语句并执行
总结如下:
1.
` -- 设置日期变量@month 格式如:05set @month=date_format(now(),'%Y%m');--设置建表语句@sql_create_tableset @sql_create_table = concat('create table if not exists game_center_download_data','_',@month,"(`id` int(11) NOT NULL AUTO_INCREMENT,`type` smallint(11) DEFAULT NULL,`num` int(11) DEFAULT NULL,`clientTime` varchar(45) DEFAULT NULL,`channel` varchar(45) DEFAULT NULL,`version` varchar(45) DEFAULT NULL,`model` varchar(125) DEFAULT NULL,`packageName` varchar(125) DEFAULT NULL,`appName` varchar(125) DEFAULT NULL,`isCp` tinyint(4) DEFAULT NULL COMMENT '是否为cp',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC");--存储过程使用prepare sql_create_table from @sql_create_table;execute sql_create_table;
注:这种比较麻烦,还得show create table game_center_download_data;得到原表结构
2.
set @target_tname = 'game_center_download_data';set @month=date_format(now(),'%Y%m');set @sql_create_table = concat('create table if not exists ',@target_tname,'_',@month,' like ',@target_tname);prepare sql_create_table from @sql_create_table;execute sql_create_table;
注:简洁!原理:create table if not exists test like game_center_download_data;