sql >> データベース >  >> RDS >> Mysql

重複キーエラーでのMySQLのロック

    用語/プロセスを単純化していると思います。クエリが解析されて実行される前に、必要なロックを取得する必要があります。この時点で、次のことが決定されます。

    • セッション1は挿入中であり、他にロックがないため、排他ロックを取得します
    • 排他ロックはセッション1によってすでに保持されており、セッション2と3は重複キーエラーになっているため、セッション2と3は共有ロックのキューに入れられます

    上記のように、セッション2と3は、重複キーエラーが発生しているため、共有ロックのキューに入れられます。ただし、セッション1がキーを削除して排他ロックを解放すると、セッション2と3の両方に共有ロックが付与されます。この時点で、両方が排他ロックを取得して挿入を完了しようとします。ただし、もう一方はすでに共有ロックを保持しているため、どちらもできません。したがって、排他ロックはどちらにも付与されず、デッドロックします。



    1. Oracleデータベースで日付形式を変更する方法

    2. parentIDとchildIDが同じテーブルにある場合にカスケードを削除するにはどうすればよいですか?

    3. 2つの配列をマージし、値を合計します(数値キー)

    4. 中間テーブルを使用してpostgresテーブルを分割する方法