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

排他的ロックを使用したSELECTでのMySQLInnoDBデッドロック(更新用)

    SELECT FOR UPDATE レコードの排他ロックを取得する前に、テーブルの意図的な排他ロックを取得します。

    したがって、このシナリオでは:

    X1: SELECT FOR UPDATE -- holds IX, holds X on 'lock_name'
    X2: SELECT FOR UPDATE -- holds IX, waits for X on 'lock_name'
    X1: INSERT -- holds IX, waits for X for the gap on `id`
    

    両方のトランザクションがIXを保持しているため、デッドロックが発生します テーブルをロックしてXを待つ レコードをロックします。

    実際、このシナリオは MySQL ロックに関するマニュアル

    これを回避するには、検索しているインデックス、つまり lock_nameを除くすべてのインデックスを削除する必要があります。 。

    idに主キーをドロップするだけです 。



    1. Slick2.0の一般的なCRUD操作

    2. 引用符に一貫性のないCSVファイルのSQLServer一括挿入

    3. SCUMMダッシュボードを使用したMySQLレプリケーションの効果的な監視:パート2

    4. 毎年jQueryフルカレンダーに誕生日イベントを追加します