Saya telah menggunakan ON DUPLICATE KEY UPDATE
banyak. Untuk beberapa situasi, ekstensi SQL non-standar yang benar-benar layak digunakan.
Pertama, Anda perlu memastikan bahwa Anda memiliki batasan kunci yang unik. ON DUPLICATE KEY UPDATE
fungsi hanya berfungsi jika akan ada pelanggaran kunci yang unik.
Berikut format yang umum digunakan:
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
berarti "Perbarui kolom1 dengan nilai yang akan dimasukkan jika kueri tidak mengenai pelanggaran kunci duplikat." Dengan kata lain, itu hanya berarti memperbarui kolom1 ke apa yang seharusnya dilakukan jika sisipan berfungsi.
Melihat kode ini, sepertinya Anda tidak benar memperbarui ketiga kolom yang Anda coba masukkan. Manakah dari kolom yang memiliki batasan unik di atasnya?
EDIT:Ubah berdasarkan format 'SET' dari pernyataan penyisipan mysql per pertanyaan dari OP.
Pada dasarnya untuk menggunakan ON DUPLICATE KEY UPDATE
, Anda cukup menulis pernyataan insert seperti biasa, tetapi tambahkan ON DUPLICATE KEY UPDATE
klausa ditempelkan di bagian akhir. Saya yakin ini akan berfungsi seperti ini:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
Sekali lagi, salah satu kolom yang Anda masukkan harus memiliki indeks unik (atau kombinasi kolom). Itu bisa karena salah satunya adalah kunci utama atau karena ada indeks unik di atas tabel.