ホームページ >データベース >mysql チュートリアル >mysql で更新するとテーブルがロックされますか?

mysql で更新するとテーブルがロックされますか?

WBOY
WBOYオリジナル
2022-05-26 14:42:368566ブラウズ

mysql の update がテーブルをロックする状況は 2 つあります。 1. update にインデックスがない場合、ステートメントの前のトランザクションは commit によって送信され、コマンドは通常どおり実行されて終了します。 update はテーブルをロックします; 2. Update added インデックス作成時にコマンドがスタックすることはなく、テーブルはロックされませんが、同じ行が更新されるため、行はロックされます。

mysql で更新するとテーブルがロックされますか?

このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。

mysql の update はテーブルをロックしますか?

インデックスがない場合、update はテーブルをロックします。インデックスが追加されると、行はロックされます。

前のトランザクションがコミットに合格した場合 送信されると、コマンドは通常どおり実行されて終了し、テーブルがロックされていることを示します。

2 つの状況:

  • 1、インデックスあり

  • 2、インデックスなし

前提の導入:

方法: コマンド ラインを使用して

1.mysq をシミュレートする 自動トランザクション送信がデフォルトで有効になっているため、まず現在のデータベースが有効になっているかどうかを確認する必要があります。 自動コミット取引。

コマンド: select @@autocommit;

結果は次のとおりです:

mysql で更新するとテーブルがロックされますか?

1 の場合は、コマンドを実行します。 set autocommit = 0; 自動送信を無効に設定します

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

tb_user | CREATE TABLE `tb_user` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) DEFAULT NULL,
 `phone` varchar(11) DEFAULT NULL,
 `operator` varchar(32) DEFAULT NULL,
 `gmt_create` datetime DEFAULT NULL,
 `gmt_modified` datetime DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

明らかに、主キーを除いて、インデックスは追加していません

実際の例:

1. インデックスなし

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

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

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

create index index_name on tb_user(name);

次に、オープン トランザクションである 1 と同様に操作を続行し、update tb_user setphone=11 を実行します。 name= "c1"; 最初に送信しないでください

その後、 update tb_user setphone=22 where name="c2"; を実行すると、コマンドがスタックしないことがわかり、ロックがないことがわかります。 table

ただし、別の 1 つも更新されている場合は、tb_user setphone=22 where name="c1"; 同じ行を更新し、行がロックされていることを示します

3. 概要

インデックスでない場合、更新によりテーブルがロックされます。インデックスが追加された場合、行はロックされます。

推奨学習: mysqlビデオチュートリアル

以上がmysql で更新するとテーブルがロックされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。