Mysql トランザクションで Update を実行するとテーブルがロックされますか?

Mysql トランザクションで Update を実行するとテーブルがロックされますか?

2つのケース:

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

前提条件:

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

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

コマンド: select @@autocommit;

結果は次のとおりです。

+--------------+
| @@自動コミット |
+--------------+
| 0 |
+--------------+

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

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

tb_user | テーブル `tb_user` を作成する (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) デフォルト NULL,
 `phone` varchar(11) デフォルト NULL,
 `operator` varchar(32) デフォルト NULL,
 `gmt_create` 日時 デフォルト NULL、
 `gmt_modified` 日時 デフォルト 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. まとめ

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

これで、MySQL トランザクションの更新がテーブルをロックするかどうかについてのこの記事は終わりです。MySQL トランザクションの更新がテーブルをロックするかどうかの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援してください。

以下もご興味があるかもしれません:
  • MySQL UPDATE ステートメントの非標準実装コード
  • mysql 更新ケース更新フィールド値が固定されていない操作
  • MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列
  • MySQL で結果を選択して更新を実行する例のチュートリアル
  • 複数のフィールドを変更するためのMysql更新の構文の詳細な分析
  • MySQLのUPDATE文の落とし穴を記録する
  • MySQL ジョイントテーブル更新デー​​タの詳細な例
  • mysql update文の実行プロセスの詳細な説明
  • Mysql 更新マルチテーブル共同更新方法の概要
  • MySQL 更新セットとの違い

<<:  Dockerのオンラインおよびオフラインインストールと一般的なコマンド操作

>>:  HTML マークアップ言語 - テーブルタグ

推薦する

CentOS 7 構成 Tomcat9+MySQL ソリューション

Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...

Next.js 入門チュートリアル

目次導入Next.jsプロジェクトを作成するNext.js プロジェクトを手動で作成するcreact...

タイムライン効果を実現するCSS3

最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...

JavaScript ES6 分割演算子の理解と応用

目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...

CSS 水平方向の中央揃えと最大幅の制限

CSS レイアウトとスタイルに関する質問: 水平方向の中央揃えと最大幅の制限のバランスをとる方法最近...

JSでHTML本文のスタイルを変更する

目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...

HTML 画像 img にハイパーリンクを追加した後の醜い青い境界線の問題を解決する

HTML画像にハイパーリンクを追加すると醜い青い枠線が表示される次のように:解決: CSS スタイル...

MySQLの分離レベルとロックメカニズムの詳細な説明

目次簡単な説明: 1. 取引の4つの特徴2. 複数の同時トランザクションによって発生する問題3. ト...

CSS は、モバイル端末でクリックされたときに生成された要素の背景色を削除します (推奨)

クリック時に背景色を生成する要素の CSS スタイルに次のコードを追加します。 -webkit-ta...

プレーンな JS オブジェクトの代わりに Map を使用する場合

目次1. マップは任意のタイプのキーを受け入れます2. マップにはキー名に関する制限はありません3....

Mac Docker x509証明書の問題を解決する

質問最近、プライベートミラーセンターにログインする必要がありましたが、ログイン時にエラーメッセージが...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

Bootstrap 3.0 学習ノート グリッドシステム事例

序文前回の記事では、主にグリッドシステムの基本原理を学び、簡単なケースを通してその原理を実践しました...

Day.js をベースにした JavaScript での日付処理のよりエレガントな方法

目次day.js を使用する理由モーメントデイ.js day.js がなければどうなるでしょうか? ...

Alibaba Cloud CentOS 7 に MySQL 8.0.13 をインストールする方法

1. MySQL インストール パッケージをダウンロードします(ここにはコツがあります。おそらく、こ...