đó 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.