如果已存在则更新行,否则使用 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 在表中插入新记录的主要内容,如果未能解决你的问题,请参考以下文章

计算联接表中的行,但如果不存在行则显示 0 - mysql

mysql 表中数据不存在则插入,否则更新数据

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

如果存在则更新行否则使用实体框架插入逻辑[关闭]

PHP MySQL:如果API数据中不存在则删除行

检查行是不是已存在如果不存在则插入行否则显示消息