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

9fkzdhlc  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(315)

我创建了以下postgresql函数和相应的触发器。我想把数据插入到user\u star\u raider表中,raider表中的stars列数据可以自动增加1,但是现在我使用的是当前的函数和触发器,结果不符合预期,你能帮我吗?
袭击者表:

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

用户名称:

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。
有什么好办法吗?

xfyts7mz

xfyts7mz1#

正如评论中提到的,您的代码可以正常工作。这是一把小提琴。
我意识到我在db<>fiddle中做了一个修改,以方便输入——这可能就是问题的原因。我换了衣服 raider_id 从一个字符串到一个数字:更少的讨厌的引号处理。
反过来,这意味着价值观必然匹配;整数有一个很好的性质,就是你看到的就是你得到的。但是,使用字符串时,可能会发生奇怪的事情,例如隐藏的字符或来自不同字符集的相似字符。可能发生的事情是,一切正常,但 raider_id 表之间的值不匹配。我的建议是建立外键关系,确保 raider_id 在第二个表中是一个有效的 raider_id 基于第一个表。

相关问题