Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

CHÈN VÀO hoặc CẬP NHẬT với hai điều kiện

đó là những gì insert on duplicate key update dành cho.

Trang Hướng dẫn sử dụng là tại đây .

Bí quyết là bảng cần phải có một khóa duy nhất (có thể là một tổ hợp) để clash thực hiện một chèn có thể được phát hiện. Như vậy, cập nhật sẽ xảy ra trên hàng đó, nếu không thì là một chèn. Tất nhiên, nó có thể là một khóa chính.

Trong trường hợp của bạn, bạn có thể có một khóa tổng hợp chẳng hạn như

unique key(theName,theDate)

Nếu hàng đã ở đó, thì clash được phát hiện và cập nhật sẽ diễn ra.

Đây là một ví dụ đầy đủ

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;

hiển thị kết quả

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

Như mong đợi, chèn trên bản cập nhật khóa trùng lặp hoạt động, chỉ 2 hàng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chuyển các hàng trong bảng mysql thành cột

  2. MySQL # 1140 - Kết hợp các cột NHÓM

  3. MySQL:Làm cách nào để tham gia cùng một bảng nhiều lần?

  4. Làm thế nào để nhân bản bảng trong MySQL

  5. MySQL THAM GIA chỉ vào hàng gần đây nhất?