需求
建立 data_0 开始,到 data_9 共 10 张表,各表的字段结构、数据引擎、编码方式等均相同。
解决方案
使用如下存储过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| DELIMITER // CREATE PROCEDURE create_table() BEGIN DECLARE `@i` INT(11); DECLARE `@sqlstr` VARCHAR(2560); SET `@i`=0; WHILE `@i` < 10 DO SET @sqlstr = CONCAT( "CREATE TABLE data_",
`@i`,
"( `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `field1` VARCHAR(6) NOT NULL, `field2` VARCHAR(10) NOT NULL, `field3` VARCHAR(10) NOT NULL, `field4` VARCHAR(10) NOT NULL, `field5` VARCHAR(10) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 " ); PREPARE stmt FROM @sqlstr; EXECUTE stmt;
SET `@i` = `@i` + 1; END WHILE; END;
|
执行存储过程,执行后删除存储过程并恢复默认命令结束符:
1 2 3
| CALL create_table(); DROP PROCEDURE create_table; DELIMITER ;
|
注意事项
创建存储过程时,若采用命令行的方式,要先修改默认命令结束符,这样将 CREATE 到 END 之间的代码当是一条语句来执行。例如上述代码中的 DELIMITER //
,将命令结束符修改为 //
,执行结束后再修改回 ;
。