我的数据库中有一个表,其中每一行都有一个父 id,它是表中另一行的 id(表代表树状结构)。我想清空桌子。但是当我表演
DELETE FROM table_name WHERE true;
我收到一个错误(外键约束)。无论如何,我如何清空桌子?
澄清:我想删除整个表格的内容,而不是表格本身。
我的数据库中有一个表,其中每一行都有一个父 id,它是表中另一行的 id(表代表树状结构)。我想清空桌子。但是当我表演
DELETE FROM table_name WHERE true;
我收到一个错误(外键约束)。无论如何,我如何清空桌子?
澄清:我想删除整个表格的内容,而不是表格本身。
创建外键关系时,需要指定on delete cascade
.
编辑:这里有一个很好的参考:http ://en.wikipedia.org/wiki/Foreign_key
这应该可以解决问题:
TRUNCATE table_name;
如果您无法更改 ON DELETE 行为,则可以重复执行此操作,直到表为空:
DELETE FROM table_name WHERE id NOT IN (SELECT parent_id FROM table_name)
首先删除没有子节点的行。
因此,如果 id 外键是 parent_id,请执行以下操作:
DELETE FROM table_name WHERE parent_id IS NOT NULL;
然后删除其余部分:
DELETE FROM table_name;
一个旧线程,但我会发布我的答案只是为了帮助任何阅读这个问题的人。
我遇到了同样的问题,我最终在执行删除语句之前将父列设置为 null。
UPDATE table_name SET parent_id=null WHERE true;
DELETE FROM table_name WHERE true;