由於業務需求,需要按天分表,因此寫了個存儲過程,根據時間生成表。
根據createTime 的時間,以及 while循環的變量設置范圍,生成該指定日期及之后的多張表。
BEGIN DECLARE `@i` INT(11); DECLARE `@createTime` varchar(32); SET `@i` = 0; set `@createTime` ='20180202'; while `@i` < 2 do set @createSql = CONCAT('CREATE TABLE IF NOT EXISTS open_msg_',`@createTime`, '(`id` int(16) NOT NULL AUTO_INCREMENT, `msgType` varchar(2) DEFAULT NULL COMMENT \' 消息類型 1:裸短信 2:模板短信\', `msgSendTime` timestamp NULL DEFAULT NULL COMMENT \'短信下發時間 YYYYMMDDhhmmss\', `developerAccount` varchar(70) DEFAULT NULL COMMENT \'開發者賬號\', `developerCompany` varchar(70) DEFAULT NULL COMMENT \'開發者公司名稱\', `templetId` varchar(70) DEFAULT NULL COMMENT \'模板id\', `msgContent` varchar(550) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT \'消息內容\', `accessNumber` varchar(35) DEFAULT NULL COMMENT \'接入號\', `userMobile` varchar(16) DEFAULT NULL COMMENT \'用戶號碼\', `msgUniqueId` varchar(70) DEFAULT NULL COMMENT \'短信唯一標識\', `appSideShortName` varchar(40) DEFAULT NULL COMMENT \'應用方簡稱\', `createTime` timestamp NULL DEFAULT NULL COMMENT \'入庫時間\', `updateTime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), index msg_index(`msgType`, `developerAccount`,`msgSendTime`,`accessNumber`) )ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8' ); prepare stmt from @createSql; execute stmt; SET `@i`= `@i`+1; set `@createTime` = (select DATE_FORMAT((select ADDDATE(`@createTime`,1)),'%Y%m%d')); END WHILE; END
