3

我对 MySQL 中的外键使用相对较新,并希望对它们有所帮助。

我的问题是我有一个包含许多列的表,其中两个依赖于另一个表中的键。一般方案是这样的,其中 'a' 和 'b' 是显示它们关系的列:

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

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

先感谢您!

编辑:为了进一步澄清,表 2 将 a 和 b 作为其主键,对表 2 的更改将导致表 3 中的 b 反映这些更改。

一个例子:

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
4

1 回答 1

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
)
于 2013-05-29T09:56:49.193 回答