如何在mysql的循环中创建一个create table语句

时间:2016-02-07 05:04:25

标签: mysql

我想用一个语句(查询)创建多个表。

Loop
    start
    (
        create table a
    )
    a =a +1
end loop

所以说它必须创建100个标记为TABLE1TABLE2,...的表格。

2 个答案:

答案 0 :(得分:0)

请尝试以下步骤。

DROP PROCEDURE IF EXISTS `createTableProcTest`;
delimiter //
CREATE PROCEDURE `createTableProcTest`()
BEGIN
    DECLARE count INT Default 0;
      simple_loop: LOOP
         SET @a := count + 1;
         SET @statement = CONCAT('Create table Table',@a,' ( name VARCHAR(70), age int );');
         PREPARE stmt FROM @statement;
                 EXECUTE stmt;
                 DEALLOCATE PREPARE stmt;
                 SET count = count + 1;
         IF count=100 THEN
            LEAVE simple_loop;
         END IF;
END LOOP simple_loop;
END//

为了执行,只需执行以下操作:

Call createTableProcTest();

通过执行上述过程,将创建具有名称table1,...,table100的100个表。 表结构如下所示:

enter image description here

N:B:执行程序可能需要几秒钟。不要急躁。

答案 1 :(得分:-1)

您需要向我们提供更多详细信息,但我认为在循环内调用存储过程更容易创建过程。

您需要创建一个过程来创建所需的表,并在循环中调用此过程。

例如:

  

CREATE PROCEDURE SP_Create_Table(IN tableName VARCHAR(50))BEGIN SET   @sql = CONCAT('CREATE TABLE',tableName,'(column1 INT(11))');
  PREPARE stmt FROM @sql;执行stmt; DEALLOCATE PREPARE stmt; END

现在,在循环中调用create table过程

  

DELIMITER //创建功能CalcIncome(starting_value INT)返回   INT BEGIN

     

DECLARE收入INT; SET收入= 0; label1:WHILE income< =   50 DO        调用SP_Create_Table(CONVERT(VARCHAR(50),starting_value));结束标签1;返回收入;结束; // DELIMITER;

希望我能阻止你,