更新或插入where子句

时间:2016-12-20 09:00:17

标签: mysql sql

我的表结构如下:

Id(PK AI) | DataField1(Varchar) | DataField2(Varchar) | User_Id(int)
1         | abc                 | xyz                 | 12
2         | sdj                 | mnu                 | 09
3         | yjf                 | pku                 | 17
4         | anx                 | vby                 | 11

我想插入或更新此表。

假设我希望将数据插入DataField1='wer', DataField2='try' where User_Id = 11,前提是给定User_Id的记录  不存在。如果存在User_Id=11的记录,则更新记录。

我想要一个查询,而不是多个查询。

请注意User_Id并非唯一。 Id是自动增量的主键,因此我没有触及该字段。

我想要的东西类似于'重复密钥更新'。据我所知,这个查询没有'where condition'。

2 个答案:

答案 0 :(得分:2)

我知道您说您想要一个查询,但如果User_Id列不是唯一的,则无法进行查询。您可以使用以下两个查询来执行此操作:

UPDATE yourTable
SET DataField1='wer', DataField2='try'
WHERE User_Id = 11;

INSERT INTO yourTable (DataField1, DataField2, User_Id)
SELECT 'wer', 'try', 11
FROM dual
WHERE NOT EXISTS (SELECT * FROM yourTable WHERE User_Id = 11)

当表中已存在用户ID时,第二个查询中的WHERE子句使SELECT查询返回空结果。

答案 1 :(得分:0)

Try below code for update and insert If Id exists : 

IF EXISTS(SELECT 1 FROM yourTable WHERE User_Id = @User_Id)
BEGIN
     UPDATE yourTable SET DataField1='wer', DataField2='try'
     WHERE User_Id = @User_Id 
END
ELSE
BEGIN
   INSERT INTO yourTable (DataField1, DataField2, User_Id)
   SELECT  'wer', 'try', @User_Id
END

IN MYSQL :

IF EXISTS(SELECT 1 FROM wp_options WHERE option_name = 
        'password_protected_version') 
THEN 
     UPDATE wp_options SET option_value='2.2.2' WHERE option_name = 
     'password_protected_version'; 
ELSE 
     INSERT INTO wp_options (option_value, option_name) SELECT '2.2.2', 
     'password_protected_version'; 
END IF;