我不想编写 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/