gpt4 book ai didi

php - MySQL:errno(150),无法创建表(与外键相关)

转载 作者:行者123 更新时间:2023-11-30 01:33:07 25 4
gpt4 key购买 nike

我想在我的项目中使用级联来简化某些流程。我创建了这两个查询以及更多查询,但所有子表在执行时都会抛出相同的错误。当我使用 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)

最佳答案

您定义了外键

ON DELETE CASCADE 

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

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

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

SQLFiddle demo

关于php - MySQL:errno(150),无法创建表(与外键相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com