对PostgreSQL的UPDATE和DELETE外键属性思考-阿里云开发者社区

开发者社区> 数据库> 正文

对PostgreSQL的UPDATE和DELETE外键属性思考

简介:

外键创建时默认属性是MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION。这里需要深入思考一下NO ACTION这部分。

首先,该部分参数有三种:

1)NO ACTION - 不允许删除/更新,但是在事务中延迟报错。

2)RESTRICT - 不允许删除/更新,直接报错。

3)CASCADE - 允许级联删除/更新。

在这里,CASCADE最好理解,是级联的意思,如删除父表数据时子表关联数据也存在则会级联删除。

NO ACTION和RESTRICT对于操作都会进行检查,如果不符合约束则会报ERROR并退出,数据不变,唯一的区别是NO ACTION可以设置约束在事务中延迟生效,而RESTRICT不允许。个人理解应该是处于事务性能的考虑,假设在一个大事务中,定义的是RESTRICT,那么执行每一条语句都回去校验,如果整个事务中没有关联删除的错误存在,那必然会导致时间的浪费;但是如果此时使用NO ACTION,事务整个过程都在平滑处理,到最后提交时,如果存在级联约束,那么久报错退出,如果不存在久直接提交整个事务,此时是最省时的。另外事务具有原子性,针对一个事务做此处理也说的过去。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章