mysql - FOREIGN KEY 引用同一表的列。无法插入值

标签 mysql foreign-keys cascade

我用 FOREIGN KEY 创建了表,但无法插入任何内容。

CREATE TABLE menus (

id int(10),
parent_id int(10),
label varchar(255),
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES menus (id)
);

我需要 FOREIGN KEY 来在删除父项时自动删除子项。此表已成功创建,但我无法插入任何内容。

INSERT INTO `menus` (`parent_id`, `label`)
VALUES ('1', 'label1');

INSERT INTO `menus` (`label`)
VALUES ( 'label1');
#1452 - Cannot add or update a child row: a foreign key constraint fails

我真的不想在 php 代码中寻找任何 child ,所以我需要以某种方式创建包含 3 列的简单表格,并自动删除所有 child 和他们的 child 。

最佳答案

对于您的所有需求,您应该采用这种结构

CREATE TABLE `menus` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) unsigned DEFAULT NULL,
  `label` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `fk_parent_menu` (`parent_id`),
  CONSTRAINT `fk_parent_menu` FOREIGN KEY (`parent_id`) 
    REFERENCES `menus` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

SQL Fiddle DEMO

Demo展示了父节点的插入和删除

所有 child 的魔法掉落部分由ON DELETE CASCADE完成

关于mysql - FOREIGN KEY 引用同一表的列。无法插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14138952/

相关文章:

mysql - InnoDB MySql 错误 1215 无法添加外键约束/甚至在删除级联义务后删除

mysql - 如何将主/外键及其列插入现有数据库?

hibernate - 级联删除操作在 hibernate 中未按预期工作

sql - 用于向现有表添加删除级联的 tsql 脚本

c++ - 在 blackberry 10 cascade 上创建一个 http 通信

mysql - 计数连接中的重复列名

mysql - 主键带auto_increment,删除原来的行后,PK开始不从头开始

php - 使用 MySQL 和 PHP 将用户窗体中的数据插入/记录到数据库中

php - 获取最新的 8 条记录 laravel 5.1

mysql - 如何将关系层次结构转换为 MySQL 中的闭包表?