sql >> Base de Datos >  >> RDS >> Mysql

Inserte múltiples datos en MySQL y actualice si existe

Todo lo que se necesita es un conflicto de índice que violaría un duplicado para que la fila se actualice y no para que se cree una nueva fila. El conflicto de índice puede ser una clave principal, uno en otro índice, ya sea una sola columna o un índice compuesto en varias columnas.

De acuerdo, lo siguiente es bastante tonto, pero tan imaginativo como puedo hacerlo ahora.

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 |
+----+----------+-------------+