postgresql 触发器,修改A表的ID,关联的B,C表中的外键ID跟着修改sql语句怎么写

postgresql 触发器

现在有

A表 字段为 id primary key, name text

B表 字段为 id primary key,A_id integer,A_id2 integer

C表 字段为 id primary key,A_id integer

B表关联了2次A表,C表关联了一次A表,我想修改A表的id,然后B表和C表中关联的id也跟着改表,sql语句如何写?求指导。

首先,需要创建两个触发器,分别用于在A表更新前和更新后执行。

触发器代码如下:

CREATE OR REPLACE FUNCTION update_b_table() RETURNS TRIGGER AS
$$
BEGIN
    UPDATE B SET a_id = NEW.id WHERE a_id = OLD.id;
    UPDATE B SET a_id2 = NEW.id WHERE a_id2 = OLD.id;
    RETURN NEW;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION update_c_table() RETURNS TRIGGER AS
$$
BEGIN
    UPDATE C SET a_id = NEW.id WHERE a_id = OLD.id;
    RETURN NEW;
END;
$$
LANGUAGE plpgsql;

CREATE TRIGGER update_b_fk
BEFORE UPDATE OF id ON A
FOR EACH ROW
EXECUTE FUNCTION update_b_table();

CREATE TRIGGER update_c_fk
BEFORE UPDATE OF id ON A
FOR EACH ROW
EXECUTE FUNCTION update_c_table();

触发器update_b_fk和update_c_fk都是在A表的id更新前,用于更新相关联的B表和C表的外键id。

其中,update_b_table函数用于更新B表,update_c_table函数用于更新C表。

注意,这里使用了NEW和OLD关键字,分别代表更新后的数据和更新前的数据。

至此,即可实现A表id更新后,相关联的B表和C表的外键id也跟着更新的操作。