悲観的ロック 悲観的ロックは、データを悲観的であるとみなします。データをクエリするときに、ロックを追加します。ロックを取得するまで他のスレッドによる改ざんを防止します。 例えば、次の表があります。 status=1 は注文が可能であることを意味します。status=2 は注文が不可能であることを意味します。同時実行プロセス中に 2 人のユーザーが同時にステータス = 1 をチェックすると、論理的には両方のユーザーが新しい注文を追加できますが、これにより製品の過剰販売が発生します。 次の例 テーブル「goods」を作成する( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) デフォルト NULL, `status` tinyint(4) デフォルト NULL, `version` int(11) デフォルト NULL, 主キー (`id`) ) エンジン=InnoDB AUTO_INCREMENT=2 デフォルト文字セット=utf8mb4 demo.goods (id、name、status、version) に VALUES (1、'test'、1、1) を挿入します。 セッション1の実行 自動コミットを0に設定します。 始める; *を選択 id=1 かつ goods.status=1 の goods から更新します。 商品を更新します。ID=1 の場合、ステータスを 2 に設定します。 セッション2実行 始める; 更新のために、id=1 の商品から * を選択します。 この時点では、ロックがまだセッション 1 にあるためセッション 2 はブロックされており、ロックは常に待機状態になっています。セッション1が送信されない場合、セッション2は一定時間後にタイムアウトして切断され、
特定のロック待機時間は、innodb_lock_wait_timeout パラメータを設定することで制御できます。 この時点でセッション 1 でコミット操作が実行されると、セッション 2 はクエリ結果を取得し、ロックはセッション 2 に与えられます。 また、 'innodb_row_lock_%' のようなステータスを表示します。 ロック情報をさらに表示します。 楽観的ロック 楽観的ロックは悲観的ロックとは異なります。楽観的ロックは、mySql 自体ではなく、独自のプログラムを通じて実装されます。 楽観的ロックではクエリはロックされず、更新時にバージョン番号のみがチェックされます。 例えば、goodsテーブルをクエリしてバージョンが1であることがわかった場合、このテーブルを更新すると、SQLは次のようになります。 id=1 の商品から * を選択します。 商品を更新します。ステータスを 2、バージョンをバージョン + 1 に設定します (ID は 1、バージョンは 1)。 ここでのバージョンはクエリ時のバージョン番号であり、変更するたびにバージョンが +1 になります。バージョン番号が一致しない場合は更新は成功しません。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
この記事では、自作メニューをクリックする効果を実現するためのJavaScriptの具体的なコードを参...
出典: https://blog.csdn.net/qq_44761243/article/deta...
データベースを作成する右クリック - 新しいデータベースを作成ライブラリ名を入力し、文字セットと並べ...
ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...
いくつかのテーブルまたは単一のデータベースのみをバックアップする場合は、innobackup よりも...
初期のコンピュータでは ASCII 文字しか使用できませんでしたが、コンピュータのアプリケーションの...
MySQL 8.0.16で初回ログイン時のパスワードを変更する方法を紹介します。 MySQLデータベ...
1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...
1. 全体的なアーキテクチャ図他のデータベースと比較すると、MySQL は、そのアーキテクチャがさま...
1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...
1. Vue レスポンシブの使用法を確認する Vue の応答性は、私たち全員がよく知っています。 ...
序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...
sudo 設定ファイルsudo のデフォルトの設定ファイルは /etc/sudoers です。一般的...
この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...
目次MySQL 8 の WITH クエリについて学ぶ1. 例3. 練習するMySQL 8 の WIT...