Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat Kebuntuan MySQL yang Disebabkan oleh Kunci Transaksi yang Bercanggah?

Bagaimana untuk Menyelesaikan Ralat Kebuntuan MySQL yang Disebabkan oleh Kunci Transaksi yang Bercanggah?

Linda Hamilton
Linda Hamiltonasal
2024-12-18 09:37:14653semak imbas

How to Resolve MySQL Deadlock Errors Caused by Conflicting Transaction Locks?

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!

Kenyataan:
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