当前位置:  开发笔记 > 数据库 > 正文

Postgres外键'on update'和'on delete'选项如何工作?

如何解决《Postgres外键'onupdate'和'ondelete'选项如何工作?》经验,为你挑选了1个好方法。

任何人都可以提供这些功能的明确解释/示例,以及何时使用它们?



1> matt b..:

直接从手册 ......

我们知道外键不允许创建与任何产品无关的订单.但是,如果在创建引用它的订单后删除了产品,该怎么办?SQL允许您处理它.直观地说,我们有几个选择:

禁止删除引用的产品

也删除订单

别的什么?

CREATE TABLE order_items (
 product_no integer REFERENCES products ON DELETE RESTRICT,
 order_id integer REFERENCES orders ON DELETE CASCADE,
 quantity integer,
 PRIMARY KEY (product_no, order_id)
);

限制和级联删除是两种最常见的选项.RESTRICT可防止删除引用的行.NO ACTION表示如果在检查约束时仍存在任何引用行,则会引发错误; 如果您未指定任何内容,则这是默认行为.(这两个选项之间的本质区别在于NO ACTION允许将检查延迟到事务的后期,而RESTRICT则不会.​​)CASCADE指定当删除引用的行时,应自动删除引用它的行同样.还有另外两个选项:SET NULL和SET DEFAULT.这些导致引用列分别在删除引用行时设置为空值或默认值.请注意,这些不能免除您观察任何约束.例如,

类似于ON DELETE,还有ON UPDATE,当引用的列被更改(更新)时调用.可能的行动是相同的.

编辑:您可能想看看这个相关的问题:何时/为什么在SQL Server中使用级联?.问题/答案背后的概念是相同的.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有