Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie mehrere Daten in MySQL ein und aktualisieren Sie sie, falls vorhanden

Es ist lediglich ein Indexkonflikt erforderlich, der ein Duplikat verletzen würde, damit die Zeile aktualisiert und keine neue Zeile erstellt wird. Der Indexkonflikt kann ein Primärschlüssel sein, einer auf einem anderen Index, sei es eine einzelne Spalte oder ein zusammengesetzter Index über mehrere Spalten hinweg.

Zugegeben, das Folgende ist ziemlich lahm, aber so einfallsreich, wie ich es gerade tun kann.

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