我用 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
);
Demo展示了父节点的插入和删除
所有 child 的魔法掉落部分由ON DELETE CASCADE
完成
关于mysql - FOREIGN KEY 引用同一表的列。无法插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14138952/