Rumah >pangkalan data >tutorial mysql >Mengapakah AUTO_INCREMENT MySQL Berkelakuan Tidak Konsisten dengan INSERT ... PADA KEMASKINI KUNCI PENDUA?

Mengapakah AUTO_INCREMENT MySQL Berkelakuan Tidak Konsisten dengan INSERT ... PADA KEMASKINI KUNCI PENDUA?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 16:51:10651semak imbas

Why Does MySQL's AUTO_INCREMENT Behave Inconsistently with INSERT ... ON DUPLICATE KEY UPDATE?

Isu PENINGKATAN AUTO KUNCI DUA DALAM MySQL

Masalah:

Apabila menggunakan INSERT ... PADA KUNCI DUA KEMASKINI kenyataan dengan jadual yang mengandungi lajur (id) peningkatan automatik, nilai id kelihatan meningkat secara ganjil apabila kunci pendua ditemui. Semasa sisipan awal (tanpa kunci pendua), id meningkat secara normal. Walau bagaimanapun, apabila klausa ON DUPLICATE KEY dicetuskan dan baris baharu dimasukkan, nilai id menjadi tidak konsisten.

Jawapan:

Tingkah laku ini disengajakan dan didokumenkan oleh MySQL . Apabila baris dimasukkan yang akan menyebabkan nilai pendua dalam indeks unik atau kunci utama, MySQL melakukan kemas kini baris lama dan bukannya memasukkan yang baharu. Ini bermakna walaupun penyataan INSERT dicuba terlebih dahulu, nilai id sudah dinaikkan pada peringkat tersebut.

Kemas kini yang berikut tidak menambah nilai id kerana lajur kenaikan automatik tidak dikemas kini oleh pernyataan KEMASKINI . Sebaliknya, nilai id daripada baris asal (kini dikemas kini) dikekalkan.

Penyelesaian:

Untuk mengekalkan kenaikan automatik tanpa jurang, anda perlu menggunakan yang berbeza pendekatan. Satu pilihan ialah mengira nilai tambahan pada output dan bukannya bergantung pada lajur kenaikan automatik. Sebagai alternatif, pendekatan yang lebih kompleks yang melibatkan kunci jadual dan pencetus boleh digunakan untuk menomborkan semula baris dan memastikan tiada jurang dalam nilai id.

Atas ialah kandungan terperinci Mengapakah AUTO_INCREMENT MySQL Berkelakuan Tidak Konsisten dengan INSERT ... PADA KEMASKINI KUNCI PENDUA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn