Php MySQL:errno(150),无法创建表(与外键相关)
我想在我的项目中使用级联来简化某些过程。我创建了这两个查询以及另外两个查询,但所有子表在执行时都会抛出相同的错误。当我使用Php MySQL:errno(150),无法创建表(与外键相关),php,mysql,foreign-keys,Php,Mysql,Foreign Keys,我想在我的项目中使用级联来简化某些过程。我创建了这两个查询以及另外两个查询,但所有子表在执行时都会抛出相同的错误。当我使用MyISAM作为引擎时,它们工作正常,但在进一步的测试和研究中,我发现它不支持级联,因此我将引擎切换到InnoDB,从而触发了这些错误。我看了几个论坛和帖子,都有同样的问题,但我似乎不知道真正的问题在哪里。有人能帮忙吗 父表: CREATE TABLE IF NOT EXISTS `branches` ( `branch_id` int(11) NOT NULL AUTO_I
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
但是您的分支\u id
被定义为非空
。那不行
您希望您的branch\u id
永远不为null
,但随后与外键相关的数据被删除,您希望使用CASCADE
选项将其设置为null
因此,要么更改删除级联上的,要么在外键中允许NULL
。这很有效
这不是排序问题,而是外键定义问题。看看这个问题:好的,谢谢,我修正了标题。你能告诉我在我的情况下我需要修改什么吗?我无法删除ON DELETE级联,因为这正是我需要的行为。简单地将NOTNULL更改为NULL或完全删除它都不起作用。谢谢,我刚刚再次测试了所有内容,这次它似乎可以正确执行,即使两个键都设置为NOTNULL