这是我的表格:
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级联上完成,这就是我想要做的方式:)。但是我已经尝试了很多配置的代码,没有一个工作。表不能被创建,或者插入查询不能工作,因为一个错误看起来类似于"key not exist"
我发现了什么?
如何从表中递归删除项?-答案是伟大的,但没有代码。这个问题的答案是:https://stackoverflow.com/a/9260373/1125465不适合我。创建表时存在一些问题。我觉得这个回答太匆忙了,是不是漏掉了关键字?
递归MySQL查询与关系型innoDB这一个是相似的,但不是相同的情况,有几个表。
Sql server -递归删除-拜托,一定有一个最简单的答案…
技术信息:
- mysql Ver 14.14 Distrib 5.1.70,用于pc-linux-gnu (x86_64readline 5.1 表引擎:InnoDB
这适合我(这里有一个小提琴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 |
+----+--------+