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
Lepaskan: 2024-12-18 09:37:14
asal
651 orang telah melayarinya

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

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan