to je to, co insert on duplicate key update
je pro.
Stránka manuálu je zde .
Trik je v tom, že tabulka musí mít jedinečný klíč (může být složený), aby clash
provedení vložky lze zjistit. Aktualizace jako taková proběhne na tomto řádku, jinak vložení. Může to být samozřejmě primární klíč.
Ve vašem případě můžete mít složený klíč, například
unique key(theName,theDate)
Pokud tam řádek již je, clash
je detekován a dojde k aktualizaci.
Zde je úplný příklad
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;
zobrazit výsledky
select * from myThing;
+----+------+---------+---------+------------+
| id | name | values1 | values2 | dates |
+----+------+---------+---------+------------+
| 1 | 777 | 1 | 4 | 2015-07-11 |
| 2 | 778 | 1 | 1 | 2015-07-11 |
+----+------+---------+---------+------------+
Jak se očekávalo, funguje vložení při aktualizaci duplicitního klíče, pouze 2 řádky.