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

SELECTを使用してUPDATEを実行すると、各行または選択されたすべてのレコードがロックされますか

    UPDATE トランザクションで実行されています-atomic これは、行の1つが失敗した場合(たとえば、一意の制約のため)、5000行を更新しないことを意味します。これは、トランザクションデータベースのACIDプロパティの1つです。

    このため、UPDATE トランザクション全体ですべての行をロックします。それ以外の場合、別のトランザクションは、現在の値に基づいて行の値をさらに更新できます(たとえば、レコードの更新セット値=値* '2')。このステートメントは、最初のトランザクションがコミットするかロールバックするかによって、異なる結果を生成するはずです。このため、最初のトランザクションが5000回の更新をすべて完了するのを待つ必要があります。

    ロックを解除する場合は、(より小さな)バッチで更新を実行するだけです。

    P.S. autocommit 各ステートメントが独自のトランザクションで発行されるかどうかを制御しますが、単一のクエリの実行には影響しません




    1. ORA-00001一意性制約に違反しました

    2. 既存のRailsアプリをherokuに移動するにはどうすればよいですか? (sqliteからpostgresへ)

    3. MySQLの出力ファイルへのエクスポート:CSVエスケープ文字

    4. 強いエンティティと弱いエンティティMYSQL