我对InnoDB表中的外键有疑问。我的数据库中有4个表:
注册
关联:
计划:
行业:
我用来添加密钥的SQL:
CONSTRAINT `FK_signup_industries` FOREIGN KEY (`industryid`) REFERENCES `industries` (`industryid`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_signup_affiliates` FOREIGN KEY (`afid`) REFERENCES `affiliates` (`afid`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_signup_plans` FOREIGN KEY (`planid`) REFERENCES `plans` (`planid`) ON UPDATE CASCADE ON DELETE CASCADE
我的问题是:
如果我要删除各自表中的计划或行业,是否会删除注册表中的用户?我试图找到这方面的指南,但他们并没有很好地解释。
基本上我需要做的是无论如何都不会删除注册表中的行。当我使用此查询时:
CONSTRAINT `FK_signup_plans` FOREIGN KEY (`planid`) REFERENCES `plans` (`planid`) ON UPDATE CASCADE ON DELETE NO ACTION
我收到此错误:
Cannot delete a parent row.
答案 0 :(得分:1)
如果您需要注册中的行保留,即使您删除了行业,关联公司或计划中的引用行,那么您有两个选择:
不要声明外键约束。这将删除参照完整性的强制执行,但它允许在Signup中存在引用不再存在的父主键值的行。
使用ON DELETE SET NULL。这允许行保留,但引用现在删除的父项的外键值将被更改。*
有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
*标准SQL规范还定义了一个规则ON DELETE SET DEFAULT,但InnoDB不支持此功能。