Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bisakah saya menggunakan ON DUPLICATE KEY UPDATE dengan kueri INSERT menggunakan opsi SET?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah catatan aktif CodeIgniter yang memanggil beberapa prosedur tersimpan

  2. Django ORM query GROUP BY beberapa kolom digabungkan dengan MAX

  3. Cara Mengimpor CSV ke MySQL Workbench

  4. Microsoft SQL Server setara dengan MySQL REGEXP

  5. SQL ORDER OLEH beberapa kolom