5

我的数据库中有一个表,其中每一行都有一个父 id,它是表中另一行的 id(表代表树状结构)。我想清空桌子。但是当我表演

DELETE FROM table_name WHERE true;

我收到一个错误(外键约束)。无论如何,我如何清空桌子?

澄清:我想删除整个表格的内容,而不是表格本身。

4

5 回答 5

4

创建外键关系时,需要指定on delete cascade.

编辑:这里有一个很好的参考:http ://en.wikipedia.org/wiki/Foreign_key

于 2010-12-20T23:11:26.080 回答
1

这应该可以解决问题:

TRUNCATE table_name;
于 2010-12-20T23:11:04.037 回答
1

如果您无法更改 ON DELETE 行为,则可以重复执行此操作,直到表为空:

DELETE FROM table_name WHERE id NOT IN (SELECT parent_id FROM table_name)
于 2010-12-20T23:52:42.540 回答
0

首先删除没有子节点的行。

因此,如果 id 外键是 parent_id,请执行以下操作:

DELETE FROM table_name WHERE parent_id IS NOT NULL;

然后删除其余部分:

DELETE FROM table_name;
于 2010-12-20T23:12:44.337 回答
0

一个旧线程,但我会发布我的答案只是为了帮助任何阅读这个问题的人。

我遇到了同样的问题,我最终在执行删除语句之前将父列设置为 null。

UPDATE table_name SET parent_id=null WHERE true;

DELETE FROM table_name WHERE true;
于 2015-07-17T18:33:23.267 回答