这是我的表:
CREATE TABLE `pages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent` int(11) DEFAULT NULL,
`label` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中id是唯一的id(自动增量),而parent也是同一个表中的id。如果parent为NULL,则页面没有父级。
我想要的是什么?如果我删除了一个父级,它应该自动删除同一个表中的所有孩子。 我相信这可以在DELETE CASCADE上使用,这就是我想要这样做的方式:)。但是我已经尝试了很多代码配置,但没有一个能够工作。无法创建表,或者插入查询无法正常工作,因为错误看起来类似于"键不存在"。
我发现了什么?
How to recursively delete items from table? - 答案很棒,但没有代码。这回答了同样的问题: https://stackoverflow.com/a/9260373/1125465对我不起作用。表创建存在一些问题。我认为这个答案是匆忙做出的,并且有一些关键词缺失了吗?
Recursive MySQL Query with relational innoDB这个是相似的,但情况不一样,表格很少。
Sql server - recursive delete - 来吧,必须有一个最简单的答案......
技术信息:
答案 0 :(得分:1)
这适合我(这里是一个小提琴http://sqlfiddle.com/#!8/d15b4/1):
CREATE TABLE
test
(
id INT NOT NULL PRIMARY KEY,
parent INT,
CONSTRAINT
fk_test_test
FOREIGN KEY
(parent)
REFERENCES
test (id)
ON DELETE CASCADE
);
INSERT
INTO test
VALUES (1, NULL),
(2, 1),
(3, 2),
(4, 3),
(5, NULL),
(6, 5);
SELECT *
FROM test;
+----+--------+
| id | parent |
+----+--------+
| 1 | NULL |
| 5 | NULL |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 6 | 5 |
+----+--------+
DELETE
FROM test
WHERE id = 1;
SELECT *
FROM test;
+----+--------+
| id | parent |
+----+--------+
| 5 | NULL |
| 6 | 5 |
+----+--------+