Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mencegah Kebuntuan Apabila Memasukkan Baris Tidak Sedia Ada dalam InnoDB?

Bagaimana untuk Mencegah Kebuntuan Apabila Memasukkan Baris Tidak Sedia Ada dalam InnoDB?

DDD
DDDasal
2024-10-25 20:29:02305semak imbas

How to Prevent Deadlocks When Inserting Non-Existing Rows in InnoDB?

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!

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