如果已存在则更新行,否则使用 mysql 在表中插入新记录
Posted
技术标签:
【中文标题】如果已存在则更新行,否则使用 mysql 在表中插入新记录【英文标题】:update row if already exist or else insert new record in table using mysql 【发布时间】:2020-04-22 11:57:59 【问题描述】:SELECT * FROM user_referral;
id user_id new_user_id bonus_type amount
1 123 own 25
2 234 own 25
3 123 456 referral 25
SELECT * FROM user_points;
id user_id referral_points
1 123 50
2 234 25
我正在为一个应用程序工作,我有两个类似上面的表。如果用户加入我的应用程序,他将获得一些奖励。
当用户加入时,他会得到 25 卢比,当他再次推荐另一个朋友时,他会再得到 25 卢比。所以第一条记录将出现在 user_referral 表中,该表将存储个人金额,特定用户的总金额将存储在 user_points 表中。
现在我正在 user_referral 表中编写触发器以使用 mysql 更新 user_points 表中的金额,我想检查用户是否已经存在于 user_points 表中应该更新的金额否则它应该插入新记录。
我尝试了 if else 条件但它不起作用,我不知道如何检查重复记录..
if (SELECT user_id FROM user_points WHERE user_id IN (SELECT new.user_id FROM user_referral)) then
update user_points set
referral_points=referral_points+new.point,
updated_time=new.inserted_time;
else
INSERT INTO user_points (user_id,referral_points,updated_time)
VALUES (new.user_id, new.point, new.inserted_time);
end if;
我也尝试使用重复键更新,但在我的情况下,它是插入新行而不是更新前一行。
任何帮助将不胜感激..
【问题讨论】:
【参考方案1】:考虑insert ... on duplicate key
语法:
insert into user_points(user_id, referral_points)
values(:user_id, :referral_points)
on duplicate key update referral_points = referral_points + values(referral_points)
为此,您需要对 user_points(user_id)
设置唯一约束。
当insert
出现在已经存在的user_id
上时,MySQL 转到on duplicate key
子句,其中新的referral_points
值将添加到现有值中。
【讨论】:
我会尝试制作唯一约束,我忘了保留唯一约束 欢迎@rehanraza。如果我的回答正确回答了您的问题,那么accept it 使用复选符号箭头并使用上箭头对其进行投票。谢谢!以上是关于如果已存在则更新行,否则使用 mysql 在表中插入新记录的主要内容,如果未能解决你的问题,请参考以下文章