Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat Kebuntuan MySQL yang Disebabkan oleh Kunci Transaksi yang Bercanggah?
Resolusi Ralat MySQL 'Deadlock'
Ralat "Deadlock MySQL found when trying to get lock" berlaku apabila transaksi serentak cuba mengunci sumber dalam urutan yang bertentangan. Untuk menyelesaikan masalah ini, pastikan semua pertanyaan yang mengunci berbilang kunci berbuat demikian dalam tertib menaik.
Dalam kes anda, isu ini mungkin terletak pada pertanyaan INSERT dan UPDATE yang mengunci berbilang kunci. Pertimbangkan untuk memesan klausa WHERE dalam tertib menaik untuk kedua-dua pertanyaan:
Lawatan Pertama ke Tapak:
INSERT INTO onlineusers (ip, datetime, userid, page, area, type) VALUES (123.456.789.123, now(), 321, '/thispage', 'thisarea', 3) ORDER BY id;
Pada Setiap Muat Semula Halaman:
UPDATE onlineusers (ip, datetime, page, area, type) SET ip = 123.456.789.123, datetime = now(), page = '/thispage', area = 'thisarea', type = 3 WHERE id = 888 ORDER BY id;
Selain itu, tulis semula pertanyaan PADAM untuk memesan mengikut id:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime < now() - INTERVAL 900 SECOND ORDER BY id ) u;
Dengan menguatkuasakan perintah menaik pada klausa WHERE, anda memastikan semua urus niaga mengunci kekunci dalam urutan yang sama, mengelakkan kebuntuan. Pertimbangkan untuk menggabungkan logik percubaan semula pihak pelanggan untuk mengendalikan kemungkinan percubaan semula sekiranya berlaku kebuntuan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Kebuntuan MySQL yang Disebabkan oleh Kunci Transaksi yang Bercanggah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!