INSERT ... ON DUPLICATE KEY UPDATE dideskripsikan sebagai "sisipan mode campuran" untuk tujuan AUTO_INCREMENT InnoDB penanganan. Sisipan mode campuran pada dasarnya adalah penyisipan di mana maksimum jumlah AUTO_INCREMENT yang diperlukan nilainya diketahui, tetapi jumlah yang benar-benar dibutuhkan tidak.
Sisipan mode campuran ditangani secara khusus secara default, seperti yang dijelaskan dalam dokumen MySQL :
Jika Anda menggunakan InnoDB, alternatif Anda adalah:
- Hindari
INSERT ... ON DUPLICATE KEY UPDATE. - Setel
innodb_autoinc_lock_modeparameter ke0, untuk mode kunci peningkatan otomatis "tradisional", yang menjamin bahwa semuaINSERTpernyataan akan menetapkan nilai berurutan untukAUTO_INCREMENTkolom. Namun, ini dilakukan dengan mengunci selama pernyataan, jadi ada penurunan performa yang terkait dengan setelan ini. - (Disarankan) Abaikan celah di
AUTO_INCREMENTkolom.
Catatan:AUTO_INCREMENT penanganannya benar-benar berbeda di bawah MyISAM, yang tidak menunjukkan perilaku ini.