MySQL の「デッドロック」エラーの解決策
MySQL の「ロックを取得しようとしているときにデッドロックが見つかりました」エラーは、同時トランザクションがリソースをロックしようとすると発生します。相反するシーケンス。これを解決するには、複数のキーをロックするすべてのクエリが昇順でロックされていることを確認します。
あなたの場合、複数のキーをロックする INSERT クエリと UPDATE クエリに問題がある可能性があります。両方のクエリで WHERE 句を昇順に並べることを検討してください:
サイトへの最初の訪問:
INSERT INTO onlineusers (ip, datetime, userid, page, area, type) VALUES (123.456.789.123, now(), 321, '/thispage', 'thisarea', 3) ORDER BY id;
各ページ更新時:
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;
さらに、順序付けするように DELETE クエリを書き換えます。 id:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime < now() - INTERVAL 900 SECOND ORDER BY id ) u;
WHERE 句で昇順を強制することにより、すべてのトランザクションが同じシーケンスでキーをロックし、デッドロックを防ぐことができます。デッドロックが発生した場合の潜在的な再試行を処理するために、クライアント側の再試行ロジックを組み込むことを検討してください。
以上がトランザクション ロックの競合によって引き起こされる MySQL デッドロック エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。