我创建了以下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。
有什么好的解决方法吗?
答案 0 :(得分:0)
如注释中所述,您的代码有效。这是db<>fiddle。
我意识到我对db <>提琴进行了一项更改以方便键入-这可能是导致您出现问题的原因。我将raider_id
从字符串更改为数字:要处理的讨厌的引号较少。
这又意味着值必须匹配;整数具有不错的属性,即所见即所得。但是,使用字符串可能会发生奇怪的事情-例如隐藏的字符或来自不同字符集的相似字符。可能发生的事情是一切正常,但是表之间的raider_id
值不匹配。我的建议是建立一个外键关系,以确保第二张表中的raider_id
是基于第一张表的有效raider_id
。