1. 程式人生 > >mysql-使用儲存過程一次性批量建立多張表

mysql-使用儲存過程一次性批量建立多張表

大家好,謝謝大家閱讀我的文章,請多多指教

如何使用儲存過程一次性建立多張表,^-^,程式碼如下:

業務需求:專案中需要建立100張表

我使用了儲存過程來實現

這是我專案中使用到的一個小小功能

DELIMITER $$

USE `DBName`$$

DROP PROCEDURE IF EXISTS `pro_TableCreate`$$

CREATE DEFINER=`root`@`%` PROCEDURE `pro_TableCreate`(
)
BEGIN
DECLARE i INT;
DECLARE table_name VARCHAR(20);
SET i = 0;

WHILE i<100 DO
#為了使表名成為xxx00這樣的格式加的條件判斷
IF i<10 THEN
SET table_name = CONCAT('t_UserLog0',i);
ELSE
SET table_name = CONCAT('t_UserLog',i);
END IF;

SET @csql = CONCAT(
'CREATE TABLE ',table_name,'(
ID bigint(18) UNSIGNED NOT NULL auto_increment COMMENT"註釋",
UserID int(10) comment"註釋",
ModularID int(4) comment"註釋",
BillTypeID int(4) comment"註釋",
BillerID bigint(18) comment"註釋",
LogTypeID smallint(2) default "0" comment"註釋",
Log varchar(1000) comment"註釋",
LogDate datetime comment"註釋",
Deleted tinyint(1) DEFAULT "0" comment"註釋",
DeletedID int(10) comment"註釋",
Deletedate datetime comment"註釋",
PRIMARY KEY(FInterID)
)ENGINE=Innodb default charset=utf8;'
);

PREPARE create_stmt FROM @csql;
EXECUTE create_stmt;
SET i = i+1;
END WHILE;

END$$

DELIMITER ;

最後CALL呼叫就行了

CALL pro_TableCreate();

最後資料庫顯示建立這100張表花了10秒鐘,可以考慮其他方式,以複製的方式(本人暫時沒試~)

呼叫完之後記得檢查是否建立成功哦,建議先不要一次性建立100張表,我是寫好後先建立2張測試,也就是將while那裡的i限制設為2待測試ok後,再設定回100,建立100張

建立2張表之後記得檢查一下表結構以及欄位是否遺漏

這樣就ok了

還可以優化一下,新增一個形參,表名不是固定的,而是自己傳進去的,這個就由大家自己完成咯^-^