MySQL DB和两个独立的表1:M

时间:2012-07-14 19:10:15

标签: mysql

我已经创建了两个单独的表并填充了信息。第一个表有一个名为hostname的唯一字段。每个主机名在第二个表中可能有多个记录。我已经创建了它们,并在两个表中插入了主机名。现在,我该如何连接它们?

我正在使用MySQL工作台。我必须在table2中创建foriegn密钥,这个密钥应该是主机名。现在,如果我想在插入table1之前插入table2。这可能吗?即,我的程序以在table1之前插入table2的信息的方式运行。 insert语句有什么变化吗?在table2中插入时,是否必须指定table1的任何内容?

2 个答案:

答案 0 :(得分:1)

如果您有外键,必须始终引用有效记录或为NULL。如果需要在table2之前插入table1,则必须首先插入带有外键列NULL的table2记录,然后插入table1记录,最后更新引用table2的{​​{1}}记录。

这是一个奇怪的比喻,但想到它就像建房子一样。如果在铺设基础之前在现场构建它,则会出现问题。但是,你可以在某个地方建造它,然后建立基础,然后将房子移到它上面。

现在,在旁注中,我必须质疑为什么要在table1之前插入table2 ...

答案 1 :(得分:0)

FOREIGN KEY约束用于完全阻止程序执行的操作。

它不允许您创建具有主机名表(您的table1)中不存在的主机名值的详细记录(您的table2)。

您必须更改应用的工作方式或不连接这两个表。在后一种情况下,您必须保持它们之间的数据完整性。

您必须定期在详细记录中测试新的主机名,如果它们不存在则创建它们。

我怀疑你一直在表中写入日志记录,但你还需要一个主机名“master file”来保存每个主机的信息。

如果是这种情况(或者类似的情况),只是不要连接表并手动维护主机名主文件(即使用一些计划运行的存储过程并执行table1维护)。