Gandakan dan Abaikan pada Sisipan MySQL

Kunci utama tabel MySQL dan indeks unik mencegah beberapa baris dengan indeks yang sama ditambahkan ke tabel. Jika Anda mencoba memasukkan baris duplikat dengan pernyataan INSERT standar, Anda akan menemukan kesalahan dan penyisipan akan gagal.

MySQL menyediakan beberapa alternatif untuk pernyataan INSERT standar dan masing-masing menangani baris duplikat dengan sedikit berbeda: "INSERT IGNORE," "INSERT ... ON DUPLICATE KEY UPDATE," dan "REPLACE."

Kunci Utama dan Indeks Unik

Indeks kunci utama dan batasan indeks "UNIK" mengharuskan setiap baris berisi nilai unik dalam kolom indeks, yang memungkinkan setiap baris diidentifikasi oleh kunci utamanya atau nilai dalam kolom batasan indeks UNIK.

Jika INSERT normal mencoba memasukkan baris yang berisi nilai duplikat di kunci utama atau indeks kendala UNIQUE, penyisipan akan gagal, mungkin memutar kembali seluruh transaksi.

MASUKKAN ABAIKAN

INSERT IGNORE akan menyisipkan baris dengan cara yang sama seperti INSERT, tetapi dengan pengecualian itu akan mengabaikan baris dengan nilai duplikat dan melanjutkan eksekusi tanpa membuat kesalahan. Setiap baris yang berisi nilai duplikat tidak akan disisipkan; sebagai contoh:

MASUKKAN ABAIKAN KE tabel_saya (kolom_indeks_unik, kolom_lain) NILAI (1, 'nilai lain');

INSERT ... ON DUPLICATE KEY UPDATE

INSERT ... ON DUPLICATE KEY UPDATE akan memasukkan baris non-duplikat seperti biasa. Namun, ketika menemukan baris duplikat, itu akan melakukan UPDATE pada baris asli; sebagai contoh:

MASUKKAN KE tabel_saya (kolom_unik_indeks, kolom_lain) NILAI (1, 'nilai lain') PADA UPDATE KUNCI GANDA other_column = 'nilai pembaruan duplikat';

MENGGANTIKAN

REPLACE berfungsi sama seperti INSERT, kecuali ketika menemukan baris duplikat, itu menghapus baris asli dan kemudian melanjutkan dengan penyisipan. Setiap baris dengan nilai indeks unik duplikat akan menggantikan baris yang awalnya berisi nilai tersebut; sebagai contoh:

GANTI KE my_table (unique_index_column, other_column) VALUES (1, 'other value')