mysql での for update の使用法は、「select * from table where...for update」です。for update を使用すると、クエリ中に行に排他ロックを追加できます。トランザクション操作が完了していない場合、その他トランザクションは読み取りはできますが、書き込みや更新はできません。
このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。
1. for update の使用シナリオ
高い同時実行性があり、データが正確 非常に要求の厳しいシナリオでは、更新を理解して使用する必要があります。
for update の機能は、クエリ時に行に排他ロックを追加することです。トランザクション操作が完了していない場合、他のトランザクションは読み取りはできますが、書き込みや更新はできません。
たとえば、お金や在庫などが関係します。一般に、これらの操作は長期にわたる一連の操作であり、トランザクションが開始されます。最初に読み取られたときにインベントリが 1 であり、別のプロセスがすぐにインベントリを 0 に更新し、トランザクションがまだ終了していない場合、間違ったデータが実行され続けるため、問題が発生します。したがって、高同時実行時のデータ エラーを防ぐために、upate でデータをロックする必要があります。
1 つの原則を覚えてください: 1 つのロック、2 つの判定、3 つの更新
2. 更新のための使用方法
使用姿勢:
select * from table where xxx for update
3. 更新用のテーブルのロック
InnoDB のデフォルトは行レベルのロックであり、明確に指定された主キーがある場合、それは行レベルのロックになります。それ以外の場合はテーブルレベルです。
例: テーブル food に id、name、status の 3 つのフィールドがあるとします。id は主キーで、status にはインデックスがあります。
例 1: (主キーを明示的に指定し、このレコード、行レベルのロックが存在します)
SELECT * FROM foods WHERE id=1 FOR UPDATE; SELECT * FROM foods WHERE id=1 and name=‘码农编程进阶笔记’ FOR UPDATE;
例 2: (主キー/インデックスが存在しない場合は、明示的に指定します)このようなレコード、ロックなし)
SELECT * FROM foods WHERE id=-1 FOR UPDATE;
例 3: (主キー/インデックスなし、テーブル レベルのロックなし)
SELECT * FROM food WHERE name='Coder Programming Advanced Notes' FOR UPDATE;
例 4: (主キー/インデックスが不明瞭、テーブルレベルのロック)
SELECT * FROM foods WHERE id<>‘3’ FOR UPDATE; SELECT * FROM foods WHERE id LIKE ‘3’ FOR UPDATE;
4. 更新に関する注意事項
1.for updateは InnoDB にのみ適用され、トランザクションを開くことは開始とコミットの間でのみ有効になります。
2. 更新のためのテーブル ロック状況をテストするには、MySQL のコマンド モードを使用してテスト用の 2 つのウィンドウを開きます。
推奨学習: mysql ビデオ チュートリアル
以上がmysqlでの更新の使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。