描述
我们有一个表格和数据如下:
Version: PostgreSQL 9.3
Table name: tree_data (id int, code text, name text, parent_id int)
Primary key: id
Foreign key: parent_id (refer to id)
和数据:
insert into tree_data (id, code, name, parent_id) values (1, 'aaa','aaa', null);
insert into tree_data (id, code, name, parent_id) values (2, 'bbb','bbb', 1);
insert into tree_data (id, code, name, parent_id) values (3, 'ccc','ccc', 1);
id | code | name | parent_id
1 aaa aaa null
2 bbb bbb 1
3 ccc ccc 1
这里我们的查询和我们想要的结果,它的意思是:删除id = 1(父行)时,表会自动在子行(第一级)中设置parent_id = null。
delete from tree_data where id = 1 ;
----> rows after deleting:
id | code | name | parent_id
2 bbb bbb null
3 ccc ccc null
我们的问题:
我们可以使用 postgresql 约束来做到这一点吗?如果没有,我们怎么办?
SQLFiddle 示例:http ://sqlfiddle.com/#!15/b9a62/1
在 postgres 中创建外键时,设置
ON DELETE SET NULL
.