楽観的ロック 楽観的ロックは、主にデータ バージョン記録メカニズムに基づいて実装され、通常はデータベース テーブルに「バージョン」フィールドを追加することによって実装されます。データの読み込み時にバージョン番号も一緒に読み出され、その後更新する際にバージョン番号が1つ増加します。このとき、送信されたデータのバージョンデータは、データベーステーブル内の対応するレコードの現在のバージョン情報と比較されます。送信されたデータのバージョン番号がデータベーステーブルの現在のバージョン番号より大きい場合は更新され、そうでない場合は期限切れのデータとみなされます。 たとえば、注文する場合: 製品情報を照会します。 選択(数量、バージョン) t_goodsより ここで、id = #{id} 製品情報に基づいて注文を生成します。 アイテムの数量を 1 減らします。 t_goods を更新 数量 = 数量 - 1 を設定します ここで、id = #{id}、version = #{version} 悲観的ロック 悲観的ロックは、データベースによって提供されるロック メカニズムによって実装されます。 MySQL の共有ロックと排他ロックはどちらも悲観的ロックです。デフォルトでは、データベースの追加、削除、および変更操作によって排他ロックが追加されますが、クエリではロックは追加されません。 共有ロック(読み取りロック) 共有ロックとは、複数の異なるトランザクションがリソースに対して同じロックを共有することを意味します。リソースに共有ロックを追加すると、自分でリソースを読み取ることができ、他の人もリソースを読み取ることができます (別の共有ロックを追加することもできます。つまり、共有ロックは複数のメモリを共有します) が、変更することはできません。変更する場合は、すべての共有ロックが解除されるまで待つ必要があります。構文: 例えば: ウィンドウ 1: 未完了のトランザクション内のデータに共有ロックを追加します。 始める; SELECT * FROM t_red_packet WHERE id = 1 LOCK IN SHARE MODE; ウィンドウ 2 は同じデータに共有ロックを追加し、ロックは成功します。 SELECT * FROM t_red_packet WHERE id = 1 LOCK IN SHARE MODE; 更新 t_red_packet ユーザーIDを2に設定する 排他ロック(書き込みロック) 排他ロックとは、複数の異なるトランザクションに対して、同じリソースに対してロックが 1 つしか存在できないことを意味します。リソースに排他ロックを追加すると、そのリソースに対して追加、削除、変更、およびクエリ操作を実行できますが、他のユーザーはそのリソースをロックできず、追加、削除、および変更操作を実行することもできません。構文: ウィンドウ 1: 未完了のトランザクション内のデータに排他ロックが追加されます。 始める; SELECT * FROM t_red_packet WHERE id = 1 FOR UPDATE; ウィンドウ 1、行データを正常に更新しました。 更新 t_red_packet ユーザーIDを2に設定する ウィンドウ 2 で、データ行をクエリすると、その行を見つけることができます。 t_red_packet から * を選択 WHERE id = 1 ウィンドウ 2 はデータをロックし、 SELECT * FROM t_red_packet WHERE id = 1 FOR UPDATE; 要約すると、共有ロックとは、全員が一緒に読み取り、ロックを共有するが、ロックされたデータを変更できる人はいないことを意味します。排他ロックとは、変更したいだけで、読み取りはできるが、ロックしたりデータを変更したりできないことを意味します。 行ロック 行ロックはデータの行をロックすることです。 テーブルロック テーブル ロックはテーブルをロックすることです。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Linux で独自の Nexus プライベート サーバーを構築する方法
>>: アプレットにおけるwx.getUserProfileインターフェースの具体的な使用
腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...
概要私たちは、双十一に天猫で化粧品を購入する人の平均支出額を知りたい(商品の価格帯を見つけるのに役立...
本文は以下から始まります。 123WORDPRESS.COM ダウンロード:純粋な CSS3 で超リ...
ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...
この記事では、画像の切り取りとアップロードを実装するためのvue-cropperコンポーネントの具体...
この記事は、この時期の「ピーターから奪ってポールに払う」という仕事のスタイルに対する私の不満から生ま...
目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...
1. haslayout と bfc は IE 固有の標準属性です。 2. BFC はページ上の分離...
1. nmonの紹介Nmon (Nigel's Monitor) は、AIX および Lin...
この記事では、js+canvasコードの雨効果の具体的なコードを参考までに共有します。具体的な内...
目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...
Web プロジェクトがどんどん大きくなると、CSS は天文学的な大きさと複雑さを増します。この問題を...
SQL Server のバッチコメントバッチ注釈Ctrl + (K, C): Ctrlキーを押しなが...
ウェブページにBaiduマップを挿入するBaidu Maps を自分の Web ページに追加したい場...
目次1. インデックス署名とは何ですか? 2. インデックス署名構文3. インデックス署名に関する注...