gpt4 book ai didi

php - MySQL 上删除级联删除parent_id on pk_id 删除

转载 作者:行者123 更新时间:2023-11-29 21:11:03 24 4
gpt4 key购买 nike

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

我有一个查找表,它生成文章和类别的列表,每个文章和类别都有自己的唯一 ID (nav_id),如果它是子项,则有一个 parent_id (然而,文章永远不会被用作父项)。

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

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`, `parent_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)
ENGINE = InnoDB

但是插入结果为:

':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
)

Integrity constraint violation: 1048 Column 'parent_id' cannot be null

欢迎任何和所有的想法。

表结构发生变化?外键改变?

我还在删除之后和之前尝试了触发器,但是您无法从执行触发器的同一个表中删除。

最佳答案

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

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

您不能为主键列插入 null 值。如果从主键中删除parent_id,插入将正常工作。这是SQL Fiddle

关于php - MySQL 上删除级联删除parent_id on pk_id 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366111/

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