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也跟着更新的操作。