我有一个名为 info 的数据库。在数据库中,我有 4 个不同的表info1
、和。info2
info3
info4
我想创建一个存储过程,以便每当我在表中进行更改info1
(如INSERT
、DELETE
或UPDATE
)时,其他三个表中都会出现相同的更改。
我为此使用 PostgreSQL,但我不知道如何执行此查询。
请举例说明。
提前致谢!
我有一个名为 info 的数据库。在数据库中,我有 4 个不同的表info1
、和。info2
info3
info4
我想创建一个存储过程,以便每当我在表中进行更改info1
(如INSERT
、DELETE
或UPDATE
)时,其他三个表中都会出现相同的更改。
我为此使用 PostgreSQL,但我不知道如何执行此查询。
请举例说明。
提前致谢!
基本上,您需要阅读手册以了解您在做什么。@Michael 提供了链接。
有很多不同的方法可以解决这个问题。以下是UPDATE
和的两个典型示例DELETE
:
为 UPDATE 创建触发器函数:
CREATE OR REPLACE FUNCTION trg_info1_upaft()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE info2
SET col1 = NEW.col1
--more?
WHERE info2.info1_id = NEW.info1_id;
UPDATE info3
SET col1 = NEW.col1
--more?
WHERE info3.info1_id = NEW.info1_id;
-- more?
RETURN NULL; -- because trigger is meant for AFTER UPDATE
END;
$BODY$
LANGUAGE plpgsql;
使用它创建触发器:
CREATE TRIGGER upaft
AFTER UPDATE
ON info1
FOR EACH ROW
EXECUTE PROCEDURE trg_info1_upaft();
对于删除:
CREATE OR REPLACE FUNCTION trg_info1_delaft()
RETURNS trigger AS
$BODY$
BEGIN
DELETE FROM info2
WHERE info1_id = OLD.info1_id;
-- more?
RETURN NULL; -- because trigger is meant for AFTER DELETE
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER delaft
AFTER DELETE
ON info1
FOR EACH ROW
EXECUTE PROCEDURE trg_info1_delaft();
对于此类更改,您应该使用触发器:http ://www.postgresql.org/docs/current/interactive/triggers.html
您将必须创建将新数据插入/更新/删除到其他表中的函数,然后使用CREATE TRIGGER
http://www.postgresql.org/docs/current/interactive/sql-createtrigger.html显示 PostgreSQL 以 在每次数据时调用该函数在源表中更改。