我不想写一个php
递归函数来处理它。
我有一个查找表,可以生成文章和类别的列表,每个文章和类别都有自己的唯一ID(nav_id
),如果是孩子,则会有parent_id
(然而,文章从未用作父母。)
所以我的想法是CASCADE DELETE,它一直运行违规,parent_id不能为null。然而,这就是我识别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
但INSERT结果为:
':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列' parent_id'不能为空
欢迎任何和所有想法。
表结构变化?外键改变?
我还尝试在删除之前和之后触发,但是你不能从同一个表中删除执行触发器。
答案 0 :(得分:0)
MySQL不允许您在null
中插入parent_id
值,因为它是主键的一部分。见下文:
PRIMARY KEY (`nav_id`, `parent_id`) COMMENT ''
您无法为主键列插入null
值。如果从主键中删除parent_id,则插入将正常工作。这是 SQL Fiddle 。
答案 1 :(得分:0)
完整答案
第1部分
从Darshan Mehta创建SQL表以修复空插入限额
MySQL不允许您在parent_id中插入空值,因为它是主键的一部分。见下文:
PRIMARY KEY (`nav_id`, `parent_id`) COMMENT ''
第2部分
主要问题“CASCADE DELETE”以下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
);