相关表插入记录时如何使用触发器添加列值?

时间:2020-07-25 09:29:12

标签: sql postgresql plpgsql database-trigger

我创建了以下PostgreSQL函数和相应的触发器。我想将数据插入到user_star_raider表中,raider表中的stars列数据可以自动增加1,但是现在我使用了当前函数并触发了,并且它没有达到预期的结果。您能帮我吗?

攻略表:

 raider_id | stars | visits
-----------+-------+--------
 13243     |     0 |   4525

user_star:

 user_id | raider_id | star_date
---------+-----------+-----------

我创建函数并触发:

CREATE OR REPLACE FUNCTION auto_increase_star() RETURNS TRIGGER AS $$
    BEGIN
        UPDATE raider SET stars = stars + 1 WHERE raider.raider_id = new.raider_id;
        RETURN new;
    end
$$
LANGUAGE plpgsql;

CREATE TRIGGER add_user_star_raider_trigger
    AFTER INSERT ON user_star_raider FOR EACH ROW EXECUTE PROCEDURE auto_increase_star();

当我在('1900327840@qq.com', '13243', '2020-07-25')use_star_raider中插入一行时,我希望将攻略星数列增加1。

有什么好的解决方法吗?

1 个答案:

答案 0 :(得分:0)

如注释中所述,您的代码有效。这是db<>fiddle

我意识到我对db <>提琴进行了一项更改以方便键入-这可能是导致您出现问题的原因。我将raider_id从字符串更改为数字:要处理的讨厌的引号较少。

这又意味着值必须匹配;整数具有不错的属性,即所见即所得。但是,使用字符串可能会发生奇怪的事情-例如隐藏的字符或来自不同字符集的相似字符。可能发生的事情是一切正常,但是表之间的raider_id值不匹配。我的建议是建立一个外键关系,以确保第二张表中的raider_id是基于第一张表的有效raider_id

相关问题