Mysql 如果不存在则插入,如果存在且条件为真则更新

Mysql 如果不存在则插入,如果存在且条件为真则更新,mysql,Mysql,我有一个包含id(主键)、user\u id和name的表。如果用户id与现有的用户ids不同,并且如果用户id相同,但此用户id的名称发生更改,则需要更新名称。如何做到这一点。我已经这样做了,但是它不会为相同的用户id更新,而使用不同的名称 CREATE TABLE test ( id int auto_increment primary key, user_id int, name varchar(60) ); INSERT INTO t

我有一个包含
id
(主键)、
user\u id
name
的表。如果
用户id
与现有的
用户id
s不同,并且如果
用户id
相同,但此
用户id
名称发生更改,则需要更新
名称。如何做到这一点。我已经这样做了,但是它不会为相同的
用户id
更新,而使用不同的
名称

CREATE TABLE test 
    (
     id int auto_increment primary key, 
     user_id int,
     name varchar(60)
    );


INSERT INTO test (user_id,name)
VALUES('01','user1');
INSERT INTO test (user_id,name)
VALUES('02','user2');
INSERT INTO test (user_id,name)
VALUES('03','user3');




insert into test (user_id, name) values('01', 'new_user') on duplicate key update name=values(name);

以下是
sqlfiddle

您需要将
user\u id
声明为
UNIQUE
,例如:

CREATE TABLE test 
    (
     id int auto_increment, 
     user_id int,
     name varchar(60),
     primary key(id),
     unique key(user_id)
    );

更新的fiddle:

有没有办法不将user\u id设置为唯一的,或者如果我将两列一起设置为唯一的user\u id,您的建议会起作用?@CoKoder您说过如果
user\u id
不存在,您想插入一条记录,如果
user\u id
存在,则更新。唯一的方法是插入一个
insert。。。在重复键上
语句将用户id
声明为唯一。@Mihai你是什么意思?