MySQL 構文分析テーブルのロック

WBOY
リリース: 2022-06-14 12:06:36
転載
1864 人が閲覧しました

この記事では、mysql に関する関連知識を提供します。主に、テーブル ロックに関する関連構文分析を紹介します。MySQL では、クライアント セッションが明示的にテーブル ロックを取得して、他のセッションが特定のテーブル内で同じテーブルにアクセスするのを防ぐことができます。皆さんの参考になれば幸いです。

MySQL 構文分析テーブルのロック

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

MySQL テーブル ロック

ロックは、テーブル。 MySQL では、クライアント セッションがテーブル ロックを明示的に取得して、他のセッションが特定の期間同じテーブルにアクセスできないようにすることができます。クライアント セッションは、それ自体に対してのみテーブル ロックを取得または解放できます。他のセッションのテーブル ロックを取得または解放することはできません。

CREATE TABLE tbl (
  id INT NOT NULL AUTO_INCREMENT,
  col INT NOT NULL,
  PRIMARY KEY (id)) Engine = InnoDB;
ログイン後にコピー

LOCK および UNLOCK TABLES 構文

次のステートメントは明示的にテーブル ロックを取得します。

LOCK TABLES table_name [READ | WRITE]
ログイン後にコピー

テーブルをロックするには、LOCK TABLES キーワードの後に​​その名前を指定します。さらに、ロックのタイプ (読み取りまたは書き込み) を指定できます。

テーブル ロックを解放するには、次のステートメントを使用してください:

UNLOCK TABLES;
ログイン後にコピー
ログイン後にコピー

Read lock

READ ロックには次の特性があります:

  1. READ複数のセッションが同時にテーブル ロックを取得します。さらに、他のセッションは、ロックを取得せずにテーブルからデータを読み取ることができます。
  2. READ ロックを保持しているセッションは、テーブル内のデータの読み取りのみが可能ですが、書き込みはできません。さらに、READ がロックを解放するまで、他のセッションはテーブルにデータを書き込むことができません。別のセッションからの書き込み操作は、READ ロックが解放されるまで待機状態になります。
  3. セッションが正常または異常終了した場合、MySQL は暗黙的にすべてのロックを解放します。この機能は WRITE ロックにも関連しています。

例:
最初のセッションでは、次に示すように、まず mysqldemo データベースに接続し、CONNECTION_ID() 関数を使用して現在の接続 ID を取得します。

SELECT CONNECTION_ID();
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック
次に、tbl テーブルに新しい行を挿入します。

INSERT INTO tbl(col) VALUES(10);
ログイン後にコピー

次に、tbl テーブル内のデータをクエリします。

SELECT * FROM tbl;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック
その後、ロックを取得するには、LOCK TABLE ステートメントを使用します。

LOCK TABLE tbl READ;
ログイン後にコピー

最後に、同じセッション内で tbl テーブルに新しい行を挿入しようとすると、エラー メッセージが表示されます。

INSERT INTO tbl(col) VALUES(11);
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック
したがって、READ がロックを取得すると、同じセッション内のテーブルにデータを書き込むことはできません。

別のセッションからロックを確認します。
まず、mysqldemo に接続し、接続 ID を確認します:

SELECT CONNECTION_ID();
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック
次に、TBL テーブルからデータを取得します:

SELECT * FROM tbl;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック
次に、TBL テーブルに新しい行を挿入します。

INSERT INTO tbl(col) VALUES(20);
ログイン後にコピー

MySQL 構文分析テーブルのロック
最初のセッション READ が TBL テーブルのロックを取得しているため、2 番目のセッションからの挿入操作は待機しています。まだリリースされていません。

SHOW PROCESSLISTから詳細情報を確認できます。

SHOW PROCESSLIST;
ログイン後にコピー

MySQL 構文分析テーブルのロック
その後、最初のセッションに戻り、UNLO​​CK TABLES ステートメントを使用してロックを解放します。 READ が最初のセッションのロックを解放した後、INSERT が 2 番目のセッションで操作を実行します。

unlock tables;
ログイン後にコピー

最後に、tbl テーブルのデータをチェックして、2 番目のセッションの INSERT 操作が実際に実行されたかどうかを確認します。

SELECT * FROM tbl;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック

書き込みロック

書き込みロックには次の特性があります:

  1. テーブル ロックを保持している唯一のセッションが読み取ることができます。テーブル データのフェッチと書き込み。
  2. 他のセッションは、WRITE ロックが解放されるまで、テーブルからデータを読み取ったりテーブルにデータを書き込んだりすることはできません。

まず、WRITE は最初のセッションからロックを取得します。

LOCK TABLE tbl WRITE;
ログイン後にコピー

その場合、TBL テーブル

INSERT INTO tbl(col) VALUES(11);
ログイン後にコピー
ログイン後にコピー

に新しい行を挿入すると便利です。

次に、tbl テーブルからデータを読み取ります。

SELECT * FROM tbl;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

MySQL 構文分析テーブルのロック

それも機能します。

その後、2 番目のセッションから始めて、データの書き込みと読み取りを試みます:

INSERT INTO tbl(col) VALUES(21);
 SELECT * FROM tbl;
ログイン後にコピー

MySQL 構文分析テーブルのロック
MySQL 構文分析テーブルのロック

最后,从第一个会话中释放锁定。

UNLOCK TABLES;
ログイン後にコピー
ログイン後にコピー

看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
MySQL 構文分析テーブルのロック

读锁与写锁

  1. 读锁是“共享”锁,它可以防止正在获取写锁,但不能锁定其他读锁。
  2. 写锁是“独占”锁,可以防止任何其他类型的锁。

推荐学习:mysql视频教程

以上がMySQL 構文分析テーブルのロックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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