FK ON UPDATE CASCADE 会起作用吗?

ted*_*uss 8 postgresql foreign-key constraint

直观地,将选项 ON UPDATE CASCADE 添加到外键约束将具有使用键的更新值更新所有引用列的效果。那真的有用吗?

从手册中提取的示例:

CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    shipping_address text,
    ...
);

CREATE TABLE order_items (
    product_no integer REFERENCES products ON DELETE RESTRICT,
    ## HERE'S THE LINE THAT I MODIFIED FROM THE MANUAL, IT USED TO SAY 'ON DELETE CASCADE'
    order_id integer REFERENCES orders ON UPDATE CASCADE,
    quantity integer,
    PRIMARY KEY (product_no, order_id)
);
Run Code Online (Sandbox Code Playgroud)

我正在使用 Postgres 9.1。

ype*_*eᵀᴹ 8

手册页中解释了ON DELETEandON UPDATE子句的可能选项CREATE TABLE

默认为NO ACTION,因此如果您定义了任何外键而没有明确指定要对引用的主键或唯一键的更新执行什么操作,则它与ON UPDATE NO ACTION指定的相同:

NO ACTION

产生一个错误,表明删除或更新会造成外键约束违规。如果约束被延迟,如果仍然存在任何引用行,则会在约束检查时产生此错误。这是默认操作。


如果您已指定ON UPDATE CASCADE外键,则在更新引用行时,引用行将相应更新:

CASCADE

删除引用已删除行的任何行,或将引用列的值分别更新为引用列的新值。

主键通常不会更新(并且有充分的理由),但在某些情况下它可能很有用。另外,外键可能引用的不是主键而是(很少更新的)唯一键。