sql >> Database teknologi >  >> RDS >> Mysql

INSERT INTO eller OPDATERING med to betingelser

det er hvad insert on duplicate key update er til.

Manual-siden til det er her .

Tricket er, at tabellen skal have en unik nøgle (kan være en sammensat), så clash at lave en indsættelse kan detekteres. Som sådan skal opdateringen ske på den række, ellers en indsættelse. Det kan selvfølgelig være en primær nøgle.

I dit tilfælde kunne du have en sammensat nøgle såsom

unique key(theName,theDate)

Hvis rækken allerede er der, vises clash registreres, og opdateringen sker.

Her er et komplet eksempel

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;

vis resultater

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

Som forventet, indsæt på dublet nøgleopdatering virker, kun 2 rækker.



  1. MySQL PHP-inkompatibilitet

  2. Forstå pdo mysql transaktioner

  3. SQL Server 2008 kan ikke logge på med nyoprettet bruger

  4. Konvertering af DateTime til ÅÅÅÅ-MM-DD-format i SQL Server