Menyelesaikan Ralat "Lock Wait Timeout Melebihi" dalam MySQL
Menghadapi ralat "Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi" dalam MySQL, walaupun tanpa menggunakan transaksi secara eksplisit, adalah masalah biasa dengan beberapa punca yang berpotensi.
Salah satu punca yang kerap berlaku ialah kunci meja yang dipegang oleh proses lain. Untuk mengenal pasti jadual terkunci, gunakan arahan ini:
<code class="language-sql">SHOW OPEN TABLES WHERE In_use > 0;</code>
Pertanyaan ini mendedahkan jadual yang sedang dikunci. Jika jadual sasaran anda muncul, langkah seterusnya ialah mencari proses yang bertanggungjawab menggunakan:
<code class="language-sql">SHOW PROCESSLIST;</code>
Ini memaparkan proses aktif. Cari ID proses (PID) yang mengunci jadual anda dan tamatkannya dengan:
<code class="language-sql">KILL <process_id>;</code>
Senario lain melibatkan transaksi tersirat. Semak ini menggunakan:
<code class="language-sql">SELECT @@INNODB_TRX_ID;</code>
Hasil bukan sifar menunjukkan transaksi tersirat yang aktif. Paksa komitmen dengan:
<code class="language-sql">COMMIT;</code>
Sekiranya langkah ini gagal, memulakan semula pelayan MySQL atau mengoptimumkan jadual mungkin merupakan penyelesaian yang diperlukan. Pengoptimuman jadual boleh dicapai menggunakan pelbagai arahan bergantung pada versi dan keperluan MySQL khusus anda.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tamat Masa Tunggu Kunci Melebihi' Walaupun Tanpa Transaksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!