Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:errno(150),无法创建表(与外键相关)_Php_Mysql_Foreign Keys - Fatal编程技术网

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