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

MySQL:単純なテーブルでの(スレッドを介した)同時更新

    ロックは暗黙的です、はい、しかしそれはexecuteUpdate()によって行われていません 。 MySQLのストレージエンジンがロックとロック解除を処理します。

    MyISAMテーブルに書き込むときはいつでも、クエリはテーブルの書き込みロックが使用可能になるのを待ち、書き込みロックが取得され、書き込みが行われ、書き込みロックが解放されます。 MyISAMには、実際には各ワーカーが書き込みロックを待機しているため、真の書き込み同時実行性はありません。書き込み要求はシリアル化されているため、エラーは発生しません。

    InnoDBの状況は似ていますが、非常に異なります。InnoDBはテーブルの一部のみをロックし、通常は行レベルでロックします。InnoDBはインデックス内の範囲をロックできるため、インデックス内のその範囲の行をロックできます(およびそれらに先行するギャップ)。このロックはテーブルロックよりもきめ細かく、同時実行動作を改善できますが、同じ行での同時操作はありません。各ワーカーは、必要な1つまたは複数のロックを待機します。

    どちらの場合も、ロックは暗黙的に取得されます。




    1. SQLServerのバージョン間での単一トランザクションのデッドロックに続く

    2. T-SQLで(タイムゾーンなしで)現在の日付と時刻を取得する方法

    3. 特定の基準に一致する正規化されたMySQL5.7構造から値を取得する方法

    4. 一致した条件に基づいてSQLレコードを並べ替える