我有一张看起来像这样的表:
CREATE TABLE `library_mix` (
`lib_mix_id` VARCHAR(64) NOT NULL ,
`date` DATE NOT NULL ,
`index1` VARCHAR(64) NULL ,
`index2` VARCHAR(64) NULL ,
`index3` VARCHAR(64) NULL ,
`index4` VARCHAR(64) NULL ,
`index5` VARCHAR(64) NULL ,
...
`index96` VARCHAR(64) NULL ,
...
)
对于index1到index96中的每一个,我想添加相同的外键约束。理想情况下,我想在程序循环中创建索引和fk约束,但我不清楚在MySQL中如何做到这一点,并且没有找到任何好的例子。类似的东西:
CREATE TABLE `library_mix` (
`lib_mix_id` VARCHAR(64) NOT NULL ,
`date` DATE NOT NULL ,
for i = 1 to 96
`index`$i VARCHAR(64) NULL,
end
...
for i = 1 to 96
CONSTRAINT `fk_library_mix_lib_id`$i
FOREIGN KEY (`lib_id` )
REFERENCES `library` (`lib_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
end)
有没有一种简单的方法可以做到这一点而不是输入96次?
修改
我对下面的一些评论的回答太长了,所以我在这里添加它。
所以在这张表中,我试图模拟DNA库的特定混合物。外键约束是为了确保库表中存在库ID。
可能有用的其他信息:
我很高兴听到更好的模拟方法,而不是单列每条码。
谢谢!
凯文
编辑2 @eggyal在评论中的建议是解决这个问题的正确方法。 (我的新手错误。)谢谢!
答案 0 :(得分:0)
我将回答你的问题,但似乎你在图书馆之间存在多对多的关系,而你却没有正确地解决它。 eggyal和Thomas的评论非常有效。请研究如何在数据库中创建适当的多对多关系。这会使这个问题变得容易多了。
要轻松创建约束,您将打开与MySQL服务器的连接并执行以下操作:
SELECT CONCAT("CONSTRAINT `fk_library_mix_lib_id`",COLUMN_NAME,"
FOREIGN KEY (`",COLUMN_NAME,"` )
REFERENCES `library` (`lib_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION ") AS SQLStatement
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Table_NAME ="library_mix"
AND COLUMN_NAME LIKE "index%"
您可以将结果复制并粘贴到新的查询窗口中并执行。我已经不测试了生成的语法,但是您应该以最小的努力修改查询以创建正确的SQL命令字符串。我将此作为练习留给您,因为它肯定会增强您对MySQL数据字典的了解。基本上,请阅读有关MySQL中的INFORMATION_SCHEMA视图的内容,他们可以做出类似这样的事情。