MySQL和外键

时间:2011-11-16 22:23:36

标签: mysql foreign-keys innodb foreign-key-relationship

我对InnoDB表中的外键有疑问。我的数据库中有4个表:

注册

  • UID - 主键
  • AFID
  • Planid
  • Industryid

关联:

  • Afid - 主键

计划:

  • Planid - 主键

行业:

  • Industryid - 主键

我用来添加密钥的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.

1 个答案:

答案 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不支持此功能。