我已经创建了两个单独的表并填充了信息。第一个表有一个名为hostname的唯一字段。每个主机名在第二个表中可能有多个记录。我已经创建了它们,并在两个表中插入了主机名。现在,我该如何连接它们?
我正在使用MySQL工作台。我必须在table2中创建foriegn密钥,这个密钥应该是主机名。现在,如果我想在插入table1之前插入table2。这可能吗?即,我的程序以在table1之前插入table2的信息的方式运行。 insert语句有什么变化吗?在table2中插入时,是否必须指定table1的任何内容?
答案 0 :(得分:1)
如果您有外键,必须始终引用有效记录或为NULL。如果需要在table2
之前插入table1
,则必须首先插入带有外键列NULL的table2
记录,然后插入table1
记录,最后更新引用table2
的{{1}}记录。
这是一个奇怪的比喻,但想到它就像建房子一样。如果在铺设基础之前在现场构建它,则会出现问题。但是,你可以在某个地方建造它,然后建立基础,然后将房子移到它上面。
现在,在旁注中,我必须质疑为什么要在table1
之前插入table2
...
答案 1 :(得分:0)
FOREIGN KEY约束用于完全阻止程序执行的操作。
它不允许您创建具有主机名表(您的table1)中不存在的主机名值的详细记录(您的table2)。
您必须更改应用的工作方式或不连接这两个表。在后一种情况下,您必须保持它们之间的数据完整性。
您必须定期在详细记录中测试新的主机名,如果它们不存在则创建它们。
我怀疑你一直在表中写入日志记录,但你还需要一个主机名“master file”来保存每个主机的信息。
如果是这种情况(或者类似的情况),只是不要连接表并手动维护主机名主文件(即使用一些计划运行的存储过程并执行table1维护)。