この記事では、mysql に関する関連知識を提供します。主に、テーブル ロックに関する関連構文分析を紹介します。MySQL では、クライアント セッションが明示的にテーブル ロックを取得して、他のセッションが特定のテーブル内で同じテーブルにアクセスするのを防ぐことができます。皆さんの参考になれば幸いです。
推奨学習: mysql ビデオ チュートリアル
ロックは、テーブル。 MySQL では、クライアント セッションがテーブル ロックを明示的に取得して、他のセッションが特定の期間同じテーブルにアクセスできないようにすることができます。クライアント セッションは、それ自体に対してのみテーブル ロックを取得または解放できます。他のセッションのテーブル ロックを取得または解放することはできません。
CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, col INT NOT NULL, PRIMARY KEY (id)) Engine = InnoDB;
次のステートメントは明示的にテーブル ロックを取得します。
LOCK TABLES table_name [READ | WRITE]
テーブルをロックするには、LOCK TABLES キーワードの後にその名前を指定します。さらに、ロックのタイプ (読み取りまたは書き込み) を指定できます。
テーブル ロックを解放するには、次のステートメントを使用してください:
UNLOCK TABLES;
READ ロックには次の特性があります:
例:
最初のセッションでは、次に示すように、まず mysqldemo データベースに接続し、CONNECTION_ID() 関数を使用して現在の接続 ID を取得します。
SELECT CONNECTION_ID();
次に、tbl テーブルに新しい行を挿入します。
INSERT INTO tbl(col) VALUES(10);
次に、tbl テーブル内のデータをクエリします。
SELECT * FROM tbl;
その後、ロックを取得するには、LOCK TABLE ステートメントを使用します。
LOCK TABLE tbl READ;
最後に、同じセッション内で tbl テーブルに新しい行を挿入しようとすると、エラー メッセージが表示されます。
INSERT INTO tbl(col) VALUES(11);
したがって、READ がロックを取得すると、同じセッション内のテーブルにデータを書き込むことはできません。
別のセッションからロックを確認します。
まず、mysqldemo に接続し、接続 ID を確認します:
SELECT CONNECTION_ID();
次に、TBL テーブルからデータを取得します:
SELECT * FROM tbl;
次に、TBL テーブルに新しい行を挿入します。
INSERT INTO tbl(col) VALUES(20);
最初のセッション READ が TBL テーブルのロックを取得しているため、2 番目のセッションからの挿入操作は待機しています。まだリリースされていません。
SHOW PROCESSLISTから詳細情報を確認できます。
SHOW PROCESSLIST;
その後、最初のセッションに戻り、UNLOCK TABLES ステートメントを使用してロックを解放します。 READ が最初のセッションのロックを解放した後、INSERT が 2 番目のセッションで操作を実行します。
unlock tables;
最後に、tbl テーブルのデータをチェックして、2 番目のセッションの INSERT 操作が実際に実行されたかどうかを確認します。
SELECT * FROM tbl;
書き込みロックには次の特性があります:
まず、WRITE は最初のセッションからロックを取得します。
LOCK TABLE tbl WRITE;
その場合、TBL テーブル
INSERT INTO tbl(col) VALUES(11);
に新しい行を挿入すると便利です。
次に、tbl テーブルからデータを読み取ります。
SELECT * FROM tbl;
それも機能します。
その後、2 番目のセッションから始めて、データの書き込みと読み取りを試みます:
INSERT INTO tbl(col) VALUES(21); SELECT * FROM tbl;
最后,从第一个会话中释放锁定。
UNLOCK TABLES;
看到第二个会话中的所有待处理操作都已执行,下图说明了结果:
推荐学习:mysql视频教程
以上がMySQL 構文分析テーブルのロックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。