我创建了一个自定义表,它在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
答案 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而被删除。在你的情况下,你做了“颠倒”。