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

标签 php mysql

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

相关文章:

php - 无法使用我的 HTML 注册表单 : UPDATED CODE 发布到我的 Mysql 数据库

php - 使用 calibre 进行 EPUB 到 PDF 转换时出现错误

php - 为什么退出不中断 php 脚本?

mysql - 在子查询中使用 group by

php - 如何在 PHP 7 中启用 MySQLi 扩展?

php - 简化array_map中item的调用方法

mysql - 想要更新 mysql 字段值,如 00001、00002、00003

mysql - 显示订单总数以及订单号所售出的产品数量

Mysql - 组合键的存储是否类似于字段?

mysql - 如何在使用 MySQL 别名的查询中使用假名?