gpt4 book ai didi

mysql - InnoDB分层数据: recursively delete fragment of a tree

转载 作者:行者123 更新时间:2023-11-29 12:53:27 24 4
gpt4 key购买 nike

这是我的 table :

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,则该页面没有parent。

我想要什么?如果我删除一个父级,它应该自动删除同一个表中他的所有子级。 我相信这可以使用 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 - 来吧,一定有一个最简单的答案......

<小时/>

技术信息:

  • mysql Ver 14.14 Distrib 5.1.70,适用于 pc-linux-gnu (x86_64) 使用阅读行5.1
  • 表引擎:InnoDB

最佳答案

这对我有用(这是一个 fiddle 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 |
+----+--------+

关于mysql - InnoDB分层数据: recursively delete fragment of a tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24425151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com