sql >> Databasteknik >  >> RDS >> Mysql

Infoga flera data till MySQL och uppdatera om det finns

Allt som krävs är en indexclash som skulle bryta mot en dubblett för att raden ska uppdateras, och inte för att en ny rad ska skapas. Indexkrocken kan vara en primärnyckel, en på ett annat index, oavsett om det är en kolumn eller ett sammansatt index över flera kolumner.

Visserligen är nedanstående ganska halt, men så fantasifullt som jag kan göra just nu.

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



  1. Gör en INSERT ... SELECT-sats atomic

  2. MySql Amazon RDS:'Innodb-funktion inaktiverad'-fel från applikationen

  3. Använder SELECT resultatuppsättning för att köra UPDATE-fråga med MySQL Stored Procedures

  4. Normalisering gör kopplingar över flera tabeller svåra