原!mysql5.6 存儲過程 批量建表


由於業務需求,需要按天分表,因此寫了個存儲過程,根據時間生成表。

根據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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM