Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjalankan Pernyataan SELECT dalam MySQL Tanpa Mengunci?
Cara Melaksanakan Pernyataan SELECT Tanpa Menyebabkan Kunci dalam MySQL
Dalam MySQL, melaksanakan pernyataan SELECT kadangkala boleh mencetuskan kunci, terutamanya apabila jadual asas sedang mengalami pengubahsuaian serentak. Ini boleh menjadi masalah, terutamanya pada pangkalan data hamba yang bergantung pada binlogging.
Satu penyelesaian berpotensi, yang dicadangkan dalam artikel yang disediakan, adalah menggunakan pengubah suai "NOLOCK". Walau bagaimanapun, MySQL tidak menyokong kata kunci yang setara. Sebaliknya, anda boleh mencapai kesan yang sama dengan melaraskan tahap pengasingan urus niaga.
Penyelesaian: Baca Tahap Pengasingan Transaksi Tidak Komited
Untuk mengelakkan kunci semasa melaksanakan pernyataan SELECT, anda boleh tetapkan tahap pengasingan transaksi kepada "READ UNCOMMITTED." Ini membolehkan transaksi tanpa komitmen kelihatan, menghalang kunci daripada berlaku. Begini cara untuk melakukannya:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Keserasian Pangkalan Data Hamba
Apabila menggunakan tahap pengasingan READ UNCOMMITTED pada pangkalan data hamba, anda mungkin menghadapi ralat: "Perduaan pengelogan tidak boleh dilakukan...Tahap transaksi 'READ-UNCOMMITTED' dalam InnoDB tidak selamat untuk mod binlog 'STATEMENT.'" Untuk menyelesaikan masalah ini, anda boleh mengubah suai fail my.cnf pada pangkalan data induk untuk mendayakan tahap pengasingan transaksi "READ UNCOMMITTED" untuk binlogging.
Penyelesaian Alternatif
Sebagai alternatif , anda boleh menggunakan teknik berikut dan bukannya menetapkan tahap pengasingan:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
Ini memaksa pertanyaan dibaca data tidak komited dan kemudian serta-merta melakukan transaksi, menghalang sebarang kemungkinan terkunci atau konflik.
Perhatikan bahawa menggunakan tahap pengasingan READ UNCOMMITTED membolehkan akses kepada data tidak komited, yang mungkin membawa kepada ketidakkonsistenan data. Adalah penting untuk mempertimbangkan potensi risiko dan menggunakannya dengan berhati-hati apabila perlu.
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Pernyataan SELECT dalam MySQL Tanpa Mengunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!