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!