外部约束On Delete Cascade不起作用

时间:2012-03-20 00:44:51

标签: mysql magento constraints

我创建了一个自定义表,它在core_website表上有一个外部约束。但是,on delete cascade无效。

我进行了搜索并找到了这个relevant thread,它指出两列之间的数据类型必须相同。两种数据类型均为smallint(5)

我确实注意到列定义中存在一个小的差异,即在core_website中,Allow Null是而不是设置,而Default未设置为零,而在帐户表中,Allow Null < em>是设置,默认为零。我不认为改变这些会产生任何影响,但我继续在帐户表上更改它们以匹配,但这没有帮助。

CREATE TABLE `account` (
  `account_id` smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  `website_id` smallint(5) unsigned DEFAULT '0',
  `code` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`account_id`),
  UNIQUE KEY `code` (`code`),
  KEY `FK_WEBSITE_ID` (`website_id`),
  CONSTRAINT `FK_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8

2 个答案:

答案 0 :(得分:1)

试试这个,让我们结果吧。

CREATE TABLE `account` (
  `account_id` smallint(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `website_id` smallint(5) unsigned DEFAULT '0',
  `code` varchar(64) NOT NULL DEFAULT '',
  UNIQUE KEY `code` (`code`),
  KEY `FK_WEBSITE_ID` (`website_id`),
  CONSTRAINT `FK_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE  
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8

答案 1 :(得分:0)

您需要将外键添加到core_website表,并将其指向website_id表中的account字段。换句话说,应该将外键添加到从属表并指向主表,在这种情况下,当您从主表中删除行时 - 依赖表中的行将因FK而被删除。在你的情况下,你做了“颠倒”。