0

我想在我的项目中使用级联来简化某些流程。我创建了这两个查询以及更多查询,但所有子表在执行时都会抛出相同的错误。当我用作MyISAM引擎时它们可以工作,但在进一步的测试和研究中,我发现它不支持级联,所以我切换了InnoDB触发这些错误的引擎。我查看了几个论坛和主题相同的问题,但我似乎无法弄清楚实际问题出在哪里。有人可以帮忙吗?

父表:

CREATE TABLE IF NOT EXISTS `branches` ( `branch_id` int(11) NOT NULL AUTO_INCREMENT, `key` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `short_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `city` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `timezone` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, UNIQUE(`key`), PRIMARY KEY (`branch_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

子表:

CREATE TABLE IF NOT EXISTS `files` ( `file_id` int(11) NOT NULL AUTO_INCREMENT, `branch_id` int(11) NOT NULL, `path` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `use_google_analytics` BOOLEAN NOT NULL, FOREIGN KEY(`branch_id`) REFERENCES `branches`(`branch_id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`file_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

错误:

1005: Can't create table 'files' (errno: 150)
4

1 回答 1

0

您定义了外键

ON DELETE CASCADE 

但是您branch_id的定义为NOT NULL. 那是行不通的。

您希望您branch_id永远不会,null但是外键相关数据会被删除,您希望NULL使用该CASCADE选项将其设置为。

因此,要么更改删除ON DELETE CASCADE或允许NULL外键。这有效

SQLFiddle 演示

于 2013-06-20T12:59:26.460 回答