我有一个名为info的数据库。在数据库中,我有4个不同的表info1
,info2
,info3
和info4
。
我想创建一个存储过程,以便每当我在表info1
(例如INSERT
,DELETE
或UPDATE
)中进行更改时,相同的更改都应出现在其他三张桌子。
我正在使用PostgreSQL,我不知道如何执行此查询。
请举例说明。
提前致谢!
答案 0 :(得分:2)
基本上,您需要阅读手册以了解您在做什么。 @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();
对于DELETE:
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();
答案 1 :(得分:1)
对于此类更改,您应使用触发器:http://www.postgresql.org/docs/current/interactive/triggers.html
您必须创建将新数据插入/更新/删除到其他表中的函数,然后使用CREATE TRIGGER
http://www.postgresql.org/docs/current/interactive/sql-createtrigger.html显示PostgreSQL,以便每次更改源表中的数据时调用该函数。