Php MySQL on delete cascade删除父\u id on pk\u id删除

Php MySQL on delete cascade删除父\u id on pk\u id删除,php,mysql,Php,Mysql,我不想编写一个php递归函数来处理它 我有一个查找表,它生成文章和类别的列表,每个都有它自己的唯一id(nav_id),如果它是子项,则它有一个parent_id(但是,文章从未用作父项) 因此,我的想法是级联删除,它不断地遇到冲突,parent_id不能为null。然而,这就是我识别root的方式 SQL 但是,请插入以下结果: ':parent_id' => null ':article_id' => null ':category_id' => 19 ':position

我不想编写一个
php
递归函数来处理它

我有一个查找表,它生成文章和类别的列表,每个都有它自己的唯一id(
nav_id
),如果它是子项,则它有一个
parent_id
(但是,文章从未用作父项)

因此,我的想法是级联删除,它不断地遇到冲突,parent_id不能为null。然而,这就是我识别root的方式

SQL

但是,请插入以下结果:

':parent_id' => null
':article_id' => null
':category_id' => 19
':position' => 1


INSERT INTO navigation (
parent_id,article_id,category_id,position
) VALUES (
:parent_id,:article_id,:category_id,:position
)

完整性约束冲突:1048列“父\u id”不能为空

欢迎提出任何意见

表结构变化?外键更改


我还在删除前后尝试了一个触发器,但是您不能从执行触发器的同一个表中删除它。

MySQL不允许您在
parent\u id
中插入
null
值,因为它是主键的一部分。见下文:

PRIMARY KEY (`nav_id`, `parent_id`)  COMMENT ''
PRIMARY KEY (`nav_id`, `parent_id`)  COMMENT ''

不能为主键列插入
null
值。如果从主键中删除父项id,插入将正常工作。这是完整的答案

第1部分

从Darshan Mehta开始创建SQL表以修复空插入容差


MySQL不允许在parent_id中插入空值,因为它是主键的一部分。见下文:

PRIMARY KEY (`nav_id`, `parent_id`)  COMMENT ''
PRIMARY KEY (`nav_id`, `parent_id`)  COMMENT ''
第二部分

主要问题是“级联删除”,以下SQL非常有效:

CREATE TABLE IF NOT EXISTS `navigation` (
`nav_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
`parent_id` INT NULL COMMENT '',
`article_id` INT NULL DEFAULT 0 COMMENT '',
`category_id` INT NULL DEFAULT 0 COMMENT '',
`position` TINYINT NULL COMMENT '',
PRIMARY KEY (`nav_id`)  COMMENT '',
UNIQUE INDEX `nav_id_UNIQUE` (`nav_id` ASC)  COMMENT '',
INDEX `rec1_idx` (`parent_id` ASC)  COMMENT '',
CONSTRAINT `rec1`
FOREIGN KEY (`parent_id`)
REFERENCES `navigation` (`nav_id`)
ON DELETE CASCADE
ON UPDATE NO ACTION
);

看看这是否有帮助:另一个:没有。多个表或它们的主键为null时出现问题。我甚至修改了我的CREATE TABLE SQL DEFAULT parent_id=null,并将其设置在PHPMyAdmin勾选框null中,结果相同。如果我删除约束,效果很好,但是我需要在删除级联上执行操作。当您尝试删除外键约束时会发生什么情况。此外,您可以将
nav\u id-parent\u id
关系移动到一个单独的表中吗?理想情况下,我希望将其全部保留在一个表中。它将用于输出任意深度的html ul li嵌套列表。无法删除或更新父行:外键约束失败(
navigation
,constraint
rec1
foreign key(
parent\u id
)引用
navigation
)'inPS。很好,我不知道SQLFiddle的存在:)我正在用谷歌搜索外键错误。你想删除记录吗?从导航中删除,其中nav_id=4;错误如上所述。我添加foreignkey的主要原因是删除任何成为父id的导航id,而无需连接php递归函数。。。我读到一些人有腐败或其他问题,建议删除db并重新创建(哦,很高兴)。但在xampp localhost上,我得到:致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[23000]:完整性约束冲突:1451无法删除或更新父行:外键约束失败(
导航
,约束rec1外键(
父id
)引用
导航
nav_id
)”在(****.php)中