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

行ごとではなくMySQLでテーブル全体を保持するSELECTFORUPDATE

    InnoDBテーブルのデフォルトの分離レベルは、反復可能な読み取りです。この分離レベルがアクティブな場合、次の動作が発生します(引用元: https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

    言い換えると、SELECTのWHERE条件で主キーを使用してみてください。たとえば、次の代わりに:

    START TRANSACTION;
    SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
    

    試してみてください:

    START TRANSACTION;
    SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
    

    idが主キーの場合。一意のインデックスを持つ他の列も機能します。 WHERE句で一意でない列を使用すると、InnoDBは行の範囲をロックします。




    1. selectステートメント内のテーブルを更新する

    2. Javaロギングの基本を学ぶ

    3. 簡略化:mysqlinum_rowsが機能しない

    4. ADODBとOracleでxas(...)を使用できないのはなぜですか?