我在MySQL 5.7.x DB中有两个表。 表A,其数据由我维护,表B,我只能读取。 我想定义一个关系(有点儿 像 外键)从表A中的一列引用表B中的一列的值,例外的是表B中被引用的列并不总是包含表A中的列所引用的值。
我不介意B的列没有值。 只要是为了咨询目的而定义的关系,就没问题。 但是,如果我试图为此使用外键关系,它就会 需要 A的值也在B中。
我怎样才能在没有要求的情况下定义这种关系呢? 也就是说,我可以让它是可选的吗?
我希望这个具体的方向是A引用B中的一个值,但是B中不包含这个值,那就可以了。 不可以 正如有人建议的那样,A中的列是空的,没有指向B中的任何值。
我在网上搜索了一下这个问题的答案,但是找不到解决办法。 可能是我的搜索词表达得不好,或者我用错了术语。
我想这可能是MySQL 8的 NOT ENFORCED
选项,但这只有在使用 CHECK
类型的约束。
MySQL中的外键可以是 是否在会话层面执行 (一些真正非正统的东西,IMHO是一个设计错误)。
SET FOREIGN_KEY_CHECKS = 0;
-- Do stuff
SET FOREIGN_KEY_CHECKS = 1;
但它是全有或全无的。咨询外键在关系型数据库设计中其实不是一个概念。乍一看,我看不出它能解决什么问题。