我对MySQL中的外键使用相对较新,希望对它们提供一些帮助。
我的问题是我有一个包含许多列的表,其中两列依赖于另一个表中的键。一般方案是这样的,其中' a'和' b'列是显示其关系的列:
Table 1 (a)
Table 2 (a,b)
Table 3 (a,b) <-- Table in question
我在表3中有一个外键,它将级联表1中发生的更新和删除。我想要做的是在表2(a)更改时,更新和删除将表b中的列b设置为NULL在这种情况下应该保持不变)。有没有办法使用外键设置这种关系?我是否会更好地使用触发器(以前从未使用过)?
提前谢谢!
编辑:为了进一步说明,表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
答案 0 :(得分: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
)