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.