sql >> Database >  >> RDS >> Mysql

INSERT INTO of UPDATE met twee voorwaarden

dat is wat insert on duplicate key update is voor.

De handmatige pagina ervoor is hier .

De truc is dat de tabel een unieke sleutel moet hebben (kan een samengestelde sleutel zijn), zodat de clash van het doen van een insert kan worden gedetecteerd. Als zodanig moet de update op die rij plaatsvinden, anders een insert. Het kan natuurlijk een primaire sleutel zijn.

In uw geval zou u een samengestelde sleutel kunnen hebben zoals

unique key(theName,theDate)

Als de rij er al is, de clash wordt gedetecteerd en de update vindt plaats.

Hier is een compleet voorbeeld

create table myThing
(   id int auto_increment primary key,
    name int not null,
    values1 int not null,
    values2 int not null,
    dates date not null,
    unique key(name,dates) -- <---- this line here is darn important
);

insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (778,1,1,'2015-07-11') on duplicate key update values2=values2+1;
-- do the 1st one a few more times:
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;

resultaten weergeven

select * from myThing;
+----+------+---------+---------+------------+
| id | name | values1 | values2 | dates      |
+----+------+---------+---------+------------+
|  1 |  777 |       1 |       4 | 2015-07-11 |
|  2 |  778 |       1 |       1 | 2015-07-11 |
+----+------+---------+---------+------------+

Zoals verwacht, invoegen bij dubbele sleutel-update werkt, slechts 2 rijen.



  1. Doe mee voor een Microsoft Access met SQL Server Academy-sessie

  2. Hoe Oracle MD5 hash-functie aan te roepen?

  3. Een tekenreeks en een getal samenvoegen in MySQL

  4. SQL-injecties in ADOdb en algemene websitebeveiliging