PostgreSQL-如何保持列更新

时间:2018-11-25 00:59:09

标签: sql postgresql database-trigger

我是SQL的新手,正在尝试更新表(ex_table)的列(ex_counter)。该列由一个计数器组成,该计数器具有ID(ex_id)在第二个表(ex2_table中的ex2_id)上出现的次数。

可以随时将ID插入第二个表中。如果该ID已经存在,则必须更新其在第一张表中对应ID的计数器(我猜只需加1)。

这是两个表:

CREATE TABLE ex_table(
 ex_id SMALLINT,
 ex_counter SMALLINT;)

CREATE TABLE ex2_table(
 ex2_id SMALLINT;)

我认为应该或多或少这样做。注释的代码是我不知道如何实现的伪代码:

CREATE TRIGGER ex_trigger AFTER
INSERT ON ex2_table
FOR EACH ROW EXECUTE PROCEDURE ex_func();



CREATE FUNCTION ex_func() RETURNS trigger AS $$ BEGIN

/* 
if ex2_id = ex_id 
    ex_counter = ex_counter + 1
*/

RETURN NULL;
END;
$$ LANGUAGE plpgsql;

谢谢!

1 个答案:

答案 0 :(得分:1)

类似这样的东西

IF EXISTS (SELECT * FROM ex_table WHERE ex_id = new.ex2_id) THEN
    UPDATE ex_table 
    SET ex_counter = ex_counter + 1
    WHERE ex_id = new.ex2_id
ELSE
    INSERT INTO ex_table VALUES (new.ex2_id, 1)
END IF;

请注意,实际上没有必要存储计数器,因为您可以轻松地通过执行SELECT COUNT()来检索值。