2013-05-29 118 views
3

我是比较新的MySQL中的外键的使用,并希望对于他们一些帮助。外键:单字段引用多个字段(相同的表)

我的问题是我有一个表中包含多个列,其中两个依赖于从另一个表的键。总体方案是这样的,其中“A”和“B”的列显示它们之间的关系:

Table 1 (a) 
Table 2 (a,b) 
Table 3 (a,b) <-- Table in question 

我有表3中的外键,将级联更新和删除表1.发生什么,我我想要做的是在更改表2(在这种情况下a应该保持不变)的情况下,将更新和删除将表3中的列b设置为NULL。有没有办法使用外键来建立这种关系?使用触发器(以前从未使用过)会更好吗?

预先感谢您!

编辑:为了进一步阐明,表2具有a和b作为其主键和改变表2将导致在表3b中,以反映这些变化。

为例:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 1 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 1 
2 1 
2 2 

从表2中删除行1目前导致:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 NULL 
2 NULL 
2 2 

我想是:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 NULL 
2 1 
2 2 

回答

0

外键也可以被定义与SET NULL(而不是ON CASCADE),您可以混合使用这些定义。例如:

CREATE TABLE Table3 (
    a INT, 
    b INT NULL, 
    FOREIGN KEY (a) REFERENCES Table1(a) 
     ON DELETE CASCADE ON UPDATE CASCADE, 
    FOREIGN KEY (b) REFERENCES Table2(b) 
     ON DELETE SET NULL ON UPDATE SET NULL 
) 
+0

对不起,我应该已经更清楚了。这是我原来有,但问题是,表3的B柱都被设置为NULL,但我需要在表2中的变化(有A和B作为其主键),以反映其在表3中的变化。换句话说,当表2中的行被删除时,只有与表2的主键匹配的行才会受到影响。 – Jason

+0

我真的很感谢你的帮助,并更新了我的问题,希望为我的问题提供足够的信息。对不起,第一次不清楚。 – Jason

+0

@Jason好吧,那么我相信你会需要一个触发器。然而这个用例很奇怪,你能解释一下你的表格及其关系的含义吗?我怀疑你的结构可以优化。 – RandomSeed

相关问题