我使用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();
答案 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;
...