Gandakan dan Abaikan di Sisipan MySQL

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

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

Kunci Utama dan Indeks Unik

Indeks kunci primer dan batasan indeks "UNIK" mengharuskan setiap baris mengandung nilai unik di kolom indeks, yang memungkinkan setiap baris diidentifikasi oleh kunci primernya atau nilai di kolom indeks kendala UNIK.

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

MASUKKAN IGNORE

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

INSERT IGNORE INTO my_table (unique_index_column, other_column) VALUES (1, 'nilai lain');

MASUK ... UPDATE KUNCI DUPLIKASI

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

INSERT INTO my_table (unique_index_column, other_column) NILAI (1, 'nilai lain') PADA DUPLICATE UPDATE KUNCI other_column = 'duplikasi nilai pembaruan';

MENGGANTIKAN

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

REPLACE INTO my_table (unique_index_column, other_column) VALUES (1, 'nilai lain')

Pesan Populer