Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjalankan Pernyataan SELECT dalam MySQL Tanpa Mengunci?

Bagaimana untuk Menjalankan Pernyataan SELECT dalam MySQL Tanpa Mengunci?

DDD
Lepaskan: 2024-12-14 18:33:12
asal
408 orang telah melayarinya

How to Run SELECT Statements in MySQL Without Locking?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan