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