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

SELECTでさえエラーを返すようにMySQL行を意図的にロックするにはどうすればよいですか?

    トランザクション分離レベルをSERIALIZABLEに設定した場合 、InnoDB 暗黙的にLOCK IN SHARE MODEを追加します すべてのSELECTに ステートメント。

    このモードは、SELECT FOR UPDATEによって設定されたロックと競合します およびSELECT sはロックされます。

    ただし、InnoDB WHEREを満たすよりも多くの行をロックする可能性があります 調子。これは、スキャンされたすべての行をロックするためです。 、一致しただけではありません 。

    たとえば、col1にインデックスがあります そしてこのクエリ:

    SELECT  *
    FROM    mytable
    WHERE   col1 = 1
            AND col2 = 2
    FOR UPDATE
    

    このインデックスを使用します。

    これにより、すべてがロックされます col1 = 1のレコード 、col2 <> 2の場合でも



    1. OSX10.7Lionにアップグレードした後のPostgresqlの修復

    2. SELECTからのSQLINSERT

    3. PostgreSQLでのトランザクション分離

    4. mssqlはvarcharをfloatに変換します