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.