任何人都可以提供这些功能的明确解释/示例,以及何时使用它们?
直接从手册 ......
我们知道外键不允许创建与任何产品无关的订单.但是,如果在创建引用它的订单后删除了产品,该怎么办?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中使用级联?.问题/答案背后的概念是相同的.