Anomali Peningkatan Automatik dengan ON DUPLICATE KEY
Dalam MySQL, apabila menggunakan INSERT ... ON penyataan KEMASKINI KUNCI DUA, tingkah laku yang tidak dijangka boleh timbul dengan lajur kenaikan automatik. Isu ini berpunca daripada fakta bahawa MySQL cuba melakukan sisipan terlebih dahulu, menyebabkan id ditambah. Selepas itu, apabila pendua dikesan, kemas kini berlaku tanpa menjejaskan nilai id.
Penjelasan:
Menurut dokumentasi MySQL, jika nilai pendua dikesan dalam indeks unik atau kunci utama semasa sisipan dengan ON DUPLICATE KEY UPDATE, MySQL melaksanakan kemas kini pada yang lama barisan. Walaupun tingkah laku ini serupa dengan pernyataan KEMASKINI, terdapat perbezaan penting apabila berurusan dengan lajur kenaikan automatik dalam jadual InnoDB.
Dalam kes sedemikian, penyataan INSERT menambah nilai kenaikan automatik, manakala KEMASKINI yang seterusnya tidak. Ini mengakibatkan percanggahan antara nilai kenaikan automatik dan bilangan baris sebenar dalam jadual.
Penyelesaian:
Adalah penting untuk mengakui bahawa urutan kenaikan automatik mungkin tidak selalu bersebelahan. Jika jurang dalam urutan tidak boleh diterima, penyelesaian yang lebih kompleks diperlukan, biasanya melibatkan penguncian jadual dan pencetus untuk mengira semula nilai tambahan. Walau bagaimanapun, untuk kebanyakan senario, adalah tidak digalakkan untuk bergantung pada jujukan autokenaikan yang tidak terputus.
Sebaliknya, pertimbangkan untuk mengira nilai tambahan pada bahagian output untuk memastikan konsistensi. Pendekatan ini menghapuskan pergantungan pada lajur kenaikan automatik dan membolehkan sisipan dan kemas kini yang lebih cekap.
Atas ialah kandungan terperinci Mengapa Tingkah Laku Peningkatan Auto MySQL Berubah dengan `KEMASKINI KUNCI PENDUPLICATE`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!