Maison >base de données >tutoriel mysql >Comment résoudre les erreurs de blocage MySQL causées par des verrous de transaction conflictuels ?

Comment résoudre les erreurs de blocage MySQL causées par des verrous de transaction conflictuels ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 09:37:14654parcourir

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

Résolution de l'erreur « Deadlock » MySQL

L'erreur « Deadlock trouvé lors de la tentative d'obtention du verrouillage » de MySQL se produit lorsque des transactions simultanées tentent de verrouiller des ressources dans séquences opposées. Pour résoudre ce problème, assurez-vous que toutes les requêtes verrouillant plusieurs clés le font dans un ordre croissant.

Dans votre cas, le problème peut provenir des requêtes INSERT et UPDATE qui verrouillent plusieurs clés. Pensez à trier la clause WHERE par ordre croissant pour les deux requêtes :

Première visite du site :

INSERT INTO onlineusers (ip, datetime, userid, page, area, type)
VALUES (123.456.789.123, now(), 321, '/thispage', 'thisarea', 3)
ORDER BY id;

Actualisation de chaque page :

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;

De plus, réécrivez la requête DELETE pour trier par id :

DELETE FROM onlineusers
WHERE id IN (
    SELECT id
    FROM onlineusers
    WHERE datetime < now() - INTERVAL 900 SECOND
    ORDER BY id
) u;

En appliquant un ordre croissant sur les clauses WHERE, vous vous assurez que toutes les transactions verrouillent les clés dans le même ordre, évitant ainsi les blocages. Envisagez d'incorporer une logique de nouvelle tentative côté client pour gérer les tentatives potentielles en cas de blocage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn