例を通してMySQLの更新がテーブルをロックするかどうかを判定する

例を通してMySQLの更新がテーブルをロックするかどうかを判定する

2つのケース:

1. 索引あり 2. 索引なし

前提条件:

方法: コマンドラインを使用してシミュレートする

1. MySQL はデフォルトでトランザクションを自動的にコミットするため、まず現在のデータベースでトランザクションが自動的にコミットされているかどうかを確認する必要があります。

コマンド: select @@autocommit;

結果は次のとおりです。

+————–+
| @@自動コミット |
+————–+
| 0 |
+————–+

1の場合は、コマンドset autocommit = 0;を実行して自動コミットを無効にします。

2. 現在のデータベーステーブル形式は次のとおりです。

tb_user | テーブル tb_user を作成する (
id bigint(20) NOT NULL AUTO_INCREMENT、
名前 varchar(32) デフォルト NULL,
電話varchar(11) デフォルトNULL、
演算子varchar(32) デフォルトNULL、
gmt_create datetime デフォルト NULL、
gmt_modified datetime デフォルト NULL、
主キー (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 デフォルト CHARSET=utf8

当然ですが、主キー以外のインデックスは追加していません。

実例:

1. 索引なし

トランザクションを開始するには、begin; コマンドを実行し、変更を加えるには、update tb_user set phone=11 where name=”c1”; コマンドを実行します。まだトランザクションをコミットしないでください。

別のウィンドウを開き、コマンドを直接実行します: update tb_user set phone=22 where name=”c2”; コマンドが停止していることがわかります。ただし、前のトランザクションがコミットを通じて送信されると、コマンドは正常に実行されて終了し、テーブルがロックされていることが示されます。

2. 名前フィールドにインデックスを追加する

tb_user(name) にインデックス index_name を作成します。

次に、ステップ1と同じように操作を続行します。つまり、トランザクションを開いて、update tb_user set phone=11 where name=”c1”; を実行します。まだコミットしないでください。

次に、別のコマンド update tb_user set phone=22 where name=”c2”; を実行すると、コマンドがスタックせず、テーブルがロックされていないことがわかります。

しかし、別の update tb_user set phone=22 where name=”c1”; が同じ行を更新する場合、その行はロックされていることを意味します。

3. まとめ

インデックスがない場合、更新によってテーブルがロックされます。インデックスが追加されると、行がロックされます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mysql トランザクションで Update を実行するとテーブルがロックされますか?
  • MySQLデータベースのロック機構の分析
  • MySQL のデッドロック チェックとデッドロック除去の例の詳細な説明
  • MySQLのデッドロックチェック処理の通常の方法
  • MySQL テーブルがロックされているかどうかを照会する方法
  • MySQL における悲観的ロックと楽観的ロック
  • MySQLの行ロックとテーブルロックの意味と違いの詳細な説明
  • MySQL の悲観的ロックと楽観的ロックの理解と応用分析
  • MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるようになりました (例)
  • MySQL ロック関連知識のまとめ

<<:  IDEA 構成の Tomcat 起動エラーの問題を解決する

>>:  Vue3.0はドロップダウンメニューのカプセル化を実装します

推薦する

HTML の基本 - ハイパーリンク スタイルを設定する簡単な例

*** ハイパーリンクのスタイル設定の例a:link クリックされる前のハイパーリンクの状態a:vi...

ウェブサイトのデザイン体験のための7つの異なるカラースキーム

ウェブサイト構築におけるカラーマッチングは非常に特殊であり、ウェブサイトのテーマ、感情、雰囲気などの...

数十億のデータに対するMySQLページングの最適化に関する簡単な説明

目次背景分析するデータシミュレーション1. 従業員テーブルと部門テーブルの2つのテーブルを作成します...

1行のコードでLinuxのプロセスを隠す方法を学ぶ

友人たちはいつも、Linux のプロセスを隠す方法を私に尋ねます。私は、どの程度隠したいのか、カーネ...

nginx で同時接続リクエストの数を制限する方法

導入同時接続数を制限するモジュールは http_limit_conn_module です。アドレス:...

ネイティブ js で呼び出し、適用、バインドを実装する方法

1. 呼び出しを実装するステップ:関数をオブジェクトのプロパティとして設定します。これを関数に割り当...

Javascript ツリー メニュー (11 項目)

1. dhtmlxツリー dHTMLxTree は機能豊富なツリー メニュー コントロールです。豊...

HTML文書におけるol要素の数値制限に関する議論

一般的に言えば、HTML ドキュメント内で極端に大きな <ol> リストに遭遇する可能性...

CSS calc() の数式に関する詳細な理解

数式 calc() は CSS の関数であり、主に数学演算に使用されます。 calc() を使用する...

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...

Windows 環境に mysql-8.0.11-winx64 をインストールする際に発生する問題を解決する

MySQL インストール パッケージをダウンロードします。mysql-8.0.11-winx64 を...

Docker で Redis センチネル モードを構成する方法 (複数のサーバー上)

目次序文状態DockerをインストールするRedisのマスターノードとスレーブノードを構成する序文以...

Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコード...

WebプロジェクトのDockerデプロイメントの実装

前回の記事では、docker サービスをインストールしました。引き続き、Web プロジェクトのデプロ...

CSS3 カスタムスクロールバースタイル::webkit-scrollbar サンプルコード詳細説明

Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...