Bolehkah Pertanyaan MySQL Dilaksanakan Tanpa Mendorong Penguncian?
Dalam MySQL, pertanyaan seperti SELECT COUNT(online.account_id) cnt dari dalam talian boleh secara tidak sengaja menyebabkan kunci pangkalan data, terutamanya apabila jadual seperti dalam talian tertakluk kepada pengubahsuaian yang kerap oleh peristiwa luaran. Untuk mengurangkan isu ini, adalah penting untuk memahami sama ada MySQL menawarkan sebarang mekanisme untuk melaksanakan penyata terpilih tanpa mencetuskan kunci.
Satu penyelesaian yang berpotensi ialah menggunakan tahap pengasingan transaksi READ-UNCOMMITTED. Walau bagaimanapun, pendekatan ini mungkin tidak serasi dengan konfigurasi pangkalan data hamba, kerana ia boleh membawa kepada ralat pengelogan binari.
Teknik alternatif ialah menggunakan arahan SET untuk melaraskan sementara tahap pengasingan transaksi kepada READ UNCOMMITTED, laksanakan pilih pernyataan, dan kemudian tetapkan semula tahap pengasingan kepada BACA BOLEH DIULANG. Kaedah ini boleh dilaksanakan dengan berkesan seperti berikut:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Untuk pangkalan data hamba, pendekatan yang lebih sesuai ialah menggunakan arahan COMMIT dan bukannya arahan SET untuk mengembalikan tahap pengasingan selepas pernyataan pilih dilaksanakan. Ini boleh dicapai dengan menggunakan urutan berikut:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; COMMIT ;
Dengan menggabungkan teknik ini, pengguna MySQL boleh melaksanakan penyataan terpilih tanpa mendorong kunci, dengan berkesan menangani isu yang digariskan dalam pertanyaan asal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pertanyaan MySQL SELECT Tanpa Mengunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!