我需要设置约束,以便只有当该表中的另一列具有特定值时,该表才接受来自其他表的外键。
数据库很复杂,但让我举个例子:
表富:
Foo_id | Foo_value | Another values...
1 | "GOOD" |
2 | "BAD" |
3 | "GOOD" |
表格栏:
Bar_id | Foo_id(FK) | Another values...
1 | 1 |
2 | 1 |
3 | 3 |
如您所见,Bar 应该只接受 Foo_Value 为“GOOD”的 Foo 的 accept id。
我尝试添加检查约束,但它不接受 WHERE 语句,所以我无法访问 Foo_Value。我尝试搜索,但我真的找不到任何东西,或者我对此的解释是错误的。
最佳答案
可能唯一的方法是使用trigger
(用于插入/更新):
create trigger chk_bar before insert on bar /* before update */
for each row
begin
if not exists (SELECT 1 FROM foo
WHERE Foo_value = 'GOOD' AND foo_id = new.foo_id) then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid FK';
end if;
end;
请记住在更新 GOOD
-> BAD
时在 foo
上添加另一个触发器,或者删除将检查引用完整性的触发器。
关于mysql - 如何为外键添加约束,使其依赖于表 FK 来自的列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165123/