sql >> Databáze >  >> RDS >> Mysql

INSERT INTO nebo UPDATE se dvěma podmínkami

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.



  1. Co je nového v PostgreSQL 12

  2. Jak mohu zrušit nenulové omezení v Oracle, když neznám název omezení?

  3. Aktualizace nebo vložení (více řádků a sloupců) z poddotazu v PostgreSQL

  4. Jak resetovat kořenové heslo MySQL