mysqlがテーブルをロックする理由は何ですか?

WBOY
リリース: 2022-01-20 10:30:58
オリジナル
11506 人が閲覧しました

mysql でテーブルをロックする理由は、あるプログラムがテーブルに対して挿入、更新、または削除操作を実行したがまだコミットされていない場合、別のプログラムも同じテーブルに対して同じ操作を実行し、その後、リソースがビジー状態の場合、つまりテーブルがロックされている場合、例外が発生します。

mysqlがテーブルをロックする理由は何ですか?

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

mysql ロック テーブルの理由は何ですか

ロックは、コンピュータが複数のプロセスまたはスレッドを調整して特定のリソースに同時にアクセスするためのメカニズムです。 。

データベースでは、従来のコンピューティング リソース (CPU、RAM、I/O など) をめぐる競争に加えて、データは多くのユーザーによって共有されるリソースでもあります。

データへの同時アクセスの一貫性と有効性を確保する方法は、すべてのデータベースが解決しなければならない問題です。ロックの競合も、データベースへの同時アクセスのパフォーマンスに影響を与える重要な要素です。

この観点から見ると、ロックはデータベースにとって特に重要であり、より複雑です。

テーブル ロックの理由

1. テーブルのロックは、挿入更新および削除中に発生します。

2. テーブル ロックの原理は次のとおりです。データベースは排他的なロック メカニズムを使用しており、上記のステートメントが実行されると、コミットが発生するかロールバックが発生するか、データベース ユーザーが終了するまでテーブルはロックされます。

まず、プログラム A がテーブル A の挿入を実行し、コミットされていません。まだです。プログラム B も tableA を挿入します。このとき、リソース ビジー例外が発生します。これは、ロック テーブル

# です。第 2 に、ロック テーブルは、並列処理ではなく並行処理で発生することがよくあります (並列、1 つのスレッドの場合)他のスレッドはデータベースを操作できず、CPU と I/O の割り当て原則)

3. テーブルがロックされる可能性を減らす:

挿入の実行間隔を短縮します。ステートメントを更新および削除してコミットします。

具体的には、バッチ実行を単一実行に変更し、SQL 自体の非実行速度を最適化し、例外が発生した場合はロールバックします。

# 例は次のとおりです。 ##Use update

kid がテーブルのインデックス フィールドで、値が一意ではないと仮定します。

1): kid に値を持つ複数のレコードがある場合

Update table set name='feie' where kid=12; #Will lock the table

2): kid に値 1 の一意のレコードがある場合、 :

='feie' where kid=1; #Will not lock

概要: インデックス フィールドを変更の条件として使用する場合、テーブルがロックされるかどうかは、インデックス フィールドがロックされているかどうかによって決まります。インデックス値が一致する場合、レコードが一意でない場合はテーブルロックが実行され、そうでない場合は行ロックが実行されます。

削除を使用する

2 つの削除がある場合: kid1 と kid2 がインデックス フィールドである

1): ステートメント 1 delete from table where kid1=1 and kid2=2;

2): ステートメント 2 delete from table where kid1=1 and kid2=3;

# そのような 2 つの削除はテーブルをロックしません

1): ステートメント 1 delete from table where kid1=1 and kid2=2;

2): ステートメント 2 delete from table where kid1=1;

# このような 2 つの削除によりテーブルがロックされます

概要: 同じテーブルに対して削除操作を実行する場合は、削除条件を統一するようにしてください。そうしないと、相互に影響し、テーブルがロックされる可能性があります。

推奨学習:

mysql ビデオ チュートリアル

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート