Mysql
 sql >> Baza danych >  >> RDS >> Mysql

INSERT INTO lub AKTUALIZUJ z dwoma warunkami

to właśnie insert on duplicate key update jest dla.

Strona podręcznika do tego znajduje się tutaj .

Sztuczka polega na tym, że tabela musi mieć unikalny klucz (może być złożony), aby clash wykonania wkładki można wykryć. W związku z tym aktualizacja ma nastąpić w tym wierszu, w przeciwnym razie wstawka. Oczywiście może to być klucz podstawowy.

W twoim przypadku możesz mieć klucz złożony, taki jak

unique key(theName,theDate)

Jeśli wiersz już tam jest, clash zostanie wykryty i nastąpi aktualizacja.

Oto kompletny przykład

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;

pokaż wyniki

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

Zgodnie z oczekiwaniami, wstawianie przy zduplikowanej aktualizacji klucza działa, tylko 2 wiersze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić wiersze tabeli z bazy danych (php)

  2. mysqli lub PDO - jakie są plusy i minusy?

  3. Wprowadzenie do typów danych SQL

  4. pt-query-digest Alternatywy - Zarządzanie zapytaniami MySQL i monitorowanie za pomocą ClusterControl

  5. Jak działa funkcja SUBSTR() w MySQL