我有一个简单的表格,如下所示。

create table chemlab.rule_header (
    id           serial PRIMARY KEY,
    name         varchar(50),
    grade        varchar(20),
    class_tag    varchar(20),    --tag added to sammple if match
    parent_id    int REFERENCES chemlab.rule_header(id) DEFAULT NULL,
    unique( grade, class_tag )
)

但是之后,我发现我需要添加ON DELETE操作,默认值为NO ACTION。我不知道如何更改操作。

现在我必须DROPADD
ALTER table chemlab.rule_header
    DROP CONSTRAINT rule_header_parent_id_fkey ;
ALTER TABLE rule_header
    ADD CONSTRAINT rule_header_parent_id_fkey
    FOREIGN KEY (parent_id) REFERENCES chemlab.rule_header(id) ON DELETE RESTRICT;

那么,改变对外键约束的操作的正确语法是什么?

最佳答案

嗯,这不是直接改变FOREIGN KEY约束的方法,尽管这只是一个语句,但仍然存在DROPADD:

ALTER table  chemlab.rule_header
    DROP CONSTRAINT rule_header_parent_id_fkey,
    ADD CONSTRAINT rule_header_parent_id_fkey
    FOREIGN KEY (parent_id) REFERENCES chemlab.rule_header(id) ON DELETE RESTRICT;

10-05 21:34