我的 MySQL 数据库中有两个表,Event
和 Theme
是一对一的关系。
ALTER TABLE Event ADD CONSTRAINT FK_FA6F25A359027487 FOREIGN KEY (theme_id) REFERENCES Theme (_uuid) ON DELETE SET NULL;
ALTER TABLE Theme ADD CONSTRAINT FK_56B4C80C71F7E88B FOREIGN KEY (event_id) REFERENCES Event (_uuid) ON DELETE CASCADE;
我想要这样的行为,如果我删除主题记录,theme_id 设置为 NULL,如果我删除事件记录,主题记录也被删除。
但是,现在当我运行 DELETE FROM Event 时,出现此错误。
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`from_dev`.`eventleveltheme`, CONSTRAINT `FK_6E25E16871F7E88B` FOREIGN KEY (`event_id`) REFERENCES `Event` (`_uuid`))
我可以不设置这两个约束吗?他们有某种冲突吗?
最佳答案
这里有一个循环引用 - Event
有一个 FK 到 Theme
并且 Theme
有一个 FK 到 Event
。从一个表到另一个表应该只有一个 FK,而不是两个。
我在这里猜测是因为我不知道您的数据的确切用途,但似乎“主题”是可以反复使用的东西,而事件是一次性的。所以我会让 Event
有一个 FK 到 Theme
,并删除 Theme
到 Event
的 FK。
关于mysql - 一对一的 FK 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520568/