0

我有一个名为 info 的数据库。在数据库中,我有 4 个不同的表info1、和。info2info3info4

我想创建一个存储过程,以便每当我在表中进行更改info1(如INSERTDELETEUPDATE)时,其他三个表中都会出现相同的更改。

我为此使用 PostgreSQL,但我不知道如何执行此查询。

请举例说明。

提前致谢!

4

2 回答 2

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();

对于删除:

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();
于 2012-08-16T13:52:46.513 回答
1

对于此类更改,您应该使用触发器:http ://www.postgresql.org/docs/current/interactive/triggers.html

您将必须创建将新数据插入/更新/删除到其他表中的函数,然后使用CREATE TRIGGER http://www.postgresql.org/docs/current/interactive/sql-createtrigger.html显示 PostgreSQL 以 在每次数据时调用该函数在源表中更改。

于 2012-08-16T11:47:56.747 回答