Pencegahan Kebuntuan untuk Memasukkan Baris Tidak Wujud dalam InnoDB
Apabila cuba memasukkan baris baharu ke dalam pangkalan data InnoDB, adalah penting untuk memastikan tiada urus niaga serentak boleh mencipta baris yang sama antara operasi pilih dan sisip. Ini menghalang keadaan perlumbaan dan potensi rasuah data.
Penyelesaian biasa ialah menggunakan pernyataan SELECT ... FOR UPDATE untuk mengunci baris yang hendak dimasukkan. Walau bagaimanapun, kaedah ini hanya berfungsi untuk baris sedia ada. Untuk mengunci baris yang tidak wujud, pendekatan yang lebih mantap diperlukan.
Kesukaran timbul kerana MySQL tidak menyediakan mekanisme untuk mengunci rekod yang tidak wujud. Urus niaga serentak boleh "mengunci" baris yang sama tidak wujud UNTUK KEMASKINI, mewujudkan situasi di mana kedua-dua transaksi percaya mereka telah memperoleh kunci.
Untuk mengatasi isu ini, pertimbangkan penyelesaian berikut:
Jadual Semaphore: Laksanakan jadual semaphore untuk menjejak baris yang tidak wujud sedang diakses. Apabila transaksi perlu memasukkan baris baharu, ia mengunci semafor yang sepadan terlebih dahulu, menghalang transaksi lain daripada memasukkan baris yang sama.
Penguncian Tahap Meja: Kunci keseluruhan jadual untuk tempoh daripada operasi sisipan. Ini menghalang sebarang urus niaga serentak daripada mengubah suai jadual, tetapi ia boleh memberi kesan ketara kepada prestasi pangkalan data.
Dengan melaksanakan mekanisme penguncian yang betul, anda boleh menjamin integriti data anda dengan menghalang sisipan serentak bagi baris yang sama. Pertimbangkan penggunaan jadual semaphore atau penguncian peringkat jadual berdasarkan keperluan khusus anda dan pertimbangan prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Kebuntuan Apabila Memasukkan Baris Tidak Sedia Ada dalam InnoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!