Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Insira vários dados no MySQL e atualize se existente


Basta um conflito de índice que violaria uma duplicata para a linha a ser atualizada, e não para que uma nova linha fosse criada. O conflito de índice pode ser uma chave primária, uma em outro índice, seja uma coluna única ou um índice composto em várias colunas.

Concedido o abaixo é bastante coxo, mas tão imaginativo quanto eu posso fazer agora.
create table user
(
    id int auto_increment primary key,
    userName varchar(20) not null,
    friendCount int not null,
    unique key(userName)
);

insert user(userName,friendCount) values('Jason7',0) on duplicate key update friendCount=friendCount+1;
select * from user;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
|  1 | Jason7   |           0 |
+----+----------+-------------+

insert user(userName,friendCount) values('Fred',0) on duplicate key update friendCount=friendCount+1;
select * from user;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
|  1 | Jason7   |           0 |
|  2 | Fred     |           0 |
+----+----------+-------------+

insert user(userName,friendCount) values('Fred',0) on duplicate key update friendCount=friendCount+1;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
|  1 | Jason7   |           0 |
|  2 | Fred     |           1 |
+----+----------+-------------+