Pertimbangkan
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
Jika a dan b adalah UNIQUE
bidang, UPDATE
terjadi pada a = 1 OR b = 2
. Juga ketika kondisi a = 1 OR b = 2
dipenuhi oleh dua atau lebih entri, pembaruan hanya dilakukan sekali.
Contoh tabel tabel di sini dengan Id dan Nama UNIQUE
bidang
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Jika kuerinya adalah
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);
maka kita mendapatkan
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
yang melanggar keunikan Id dan Nama. Sekarang dengan
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
kita mendapatkan
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
Perilaku pada beberapa tombol adalah sebagai berikut
UPDATE
di ON DUPLICATE KEY UPDATE
dilakukan jika salah satu dari UNIQUE
field sama dengan nilai yang akan disisipkan. Di sini, UPDATE
dilakukan pada Id = 1 OR Name = C
. Ini setara dengan
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C;
Bagaimana jika saya hanya menginginkan satu pembaruan, untuk salah satu kunci
Dapat menggunakan UPDATE
pernyataan dengan LIMIT
kata kunci
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
yang akan memberikan
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
Bagaimana jika saya hanya ingin satu pembaruan jika nilai untuk kedua kunci cocok
Salah satu solusinya adalah dengan ALTER TABLE
dan buat PRIMARY KEY
(atau keunikan) bekerja di kedua bidang.
ALTER TABLE table
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);
Sekarang, pada
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
kita mendapatkan
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
karena tidak ada duplikat (pada kedua kunci) yang ditemukan.