通过循环遍历另一个表来创建新表

时间:2017-07-16 19:24:25

标签: mysql phpmyadmin

我使用phpMyAdmin作为GUI来创建我的数据库结构。我有一个1500行的课程表。我想循环遍历课程表并根据课程表的每一行创建1500个表,其中新表的名称将等于课程表的course_id列。这是我到目前为止的尝试,但我知道使用行和变量存在问题。我非常感谢任何解决我需要的结果的建议。

DELIMITER $

CREATE PROCEDURE myTable()

BEGIN 

DECLARE n INT DEFAULT 0;
 DECLARE i INT DEFAULT 0;
  DECLARE tableCalled varchar(50);
   SELECT COUNT(*) FROM courses INTO n;
    SET i=0;

WHILE i<n DO 
  SELECT course_id Row i FROM courses INTO tableCalled;

  CREATE TABLE tableCalled ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20),
    'description' varchar(100),'other' varchar(100),
      PRIMARY KEY (`id`))
       ENGINE = InnoDB;

  SET i = i + 1;
END WHILE;

END 
$

CALL myTable();

1 个答案:

答案 0 :(得分:1)

您可以使用查询来创建可以运行以创建表的脚本。我假设course_id是一个有效的表名字符串。

SELECT DISTINCT 
    CONCAT('CREATE TABLE `', courses.course_id, 
        '` (''id'' UNSIGNED NOT NULL AUTO_INCREMENT,''unit'' varchar(20),
        ''description'' varchar(100),''other'' varchar(100),
      PRIMARY KEY (`id`))
      ENGINE = InnoDB;') AS statements
FROM courses;

您应该得到以下结果,您可以复制/粘贴并执行以创建表格。

CREATE TABLE `math101` ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20),
    'description' varchar(100),'other' varchar(100),
    PRIMARY KEY (`id`))
    ENGINE = InnoDB;
CREATE TABLE `science102` ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20),
    'description' varchar(100),'other' varchar(100),
    PRIMARY KEY (`id`))
    ENGINE = InnoDB;
...