ウェブサイト検索

MySQLのロックが解放されているか確認する


MySQLにおいて、ロックはデータベーステーブルに含まれる特別なフラグを指します。ロックは、他のセッションが同じテーブルに同時にアクセスするのを防ぎます。MySQLセッションは、自身のために接続し、ロックを取得または解放することができます。これは、セッションが他のセッションのためにロックを取得または解放することはできないことを意味します。ロックが解放されると、追加のセッションがテーブルにアクセスし、変更することができます。

この記事では、MySQLにおけるロックの基本について探求し、どのようにロックを作成し、データベーステーブルに対してロックを取得および解放するかを説明します。

サンプルテーブルを作成する

MySQLでロックの作成および取得を進める前に、このコードを説明するために使用できるサンプルテーブルを作成しましょう。

コードスニペット:

MySQLでロックを作成する方法

サンプルテーブルが作成され、準備が整ったら、MySQLテーブルでロックを作成する方法について話し合うことができます。

ご想像の通り、MySQLでロックを作成するには、LOCK TABLESステートメントを使用します。

構文は以下のようになります:

LOCK TABLES table_name [READ | WRITE]

上記の文では、まずLOCK TABLESキーワードを使い、その後にロックしたいテーブル名を続けます。

次に、設定したテーブルに対して作成したいロックのタイプを指定します。サポートされているロックタイプ:

  1. 読み取り [ローカル] – セッションはテーブルを読み取ることはできますが、書き込むことはできません。
      a. このタイプのロックは、テーブルに変更が加えられないため、複数のセッションが同時に使用できます。
      b. 同様に、READロックのない他のセッションもテーブルを読み取ることができます。
  2. [低優先度] 書き込み - このタイプのロックは、セッションがテーブルに対して読み取りと書き込みを行うことを許可します。
      a. READロックとは異なり、特定のテーブルに対してWRITEロックを取得できるのは単一のクライアントのみです。
      b. このロックが保持されている間、MySQLは他のセッションによるロックリクエストもブロックします。

読み取りロックを作成

以前作成したテーブルに対して、以下のコードを実行することで読み取りロックを作成できます:

LOCK TABLE users READ;

これにより、テーブルに対してREADロックが作成され、読み取り操作のみが許可されます。テーブルにレコードを挿入することで、これを確認できます。

INSERT INTO
users(username, email, country)
VALUES
('linux-console', '[email ', 'US');

テーブルはREADロックでロックされているため、MySQLは以下のようなエラーを返します:

テーブルに挿入するには、UNLOCKステートメントを使用してロックを解除できます。

UNLOCK TABLES;

これによりテーブルのロックが解除され、あなたや他のセッションがターゲット操作を実行できるようになります。

MySQL 名前付きロックが空いているか確認する

幸運なことに、MySQLは私たちに名前付きロックが解放されているかどうかを判断するための簡単な関数を提供しています。

関数の構文は以下のようになります:

IS_FREE_LOCK(str)

strは確認したいロックの名前を指します。ロックが空いていれば、関数は1を返します。したがって、セッションはそのロックを使用していません。それ以外の場合、関数は0を返し、ロックが使用中であることを意味します。

知っておくべきもう一つの関数は IS_USED_LOCK() 関数です。構文は次のようになります:

IS_USED_LOCK(str)

この関数は、指定されたロックが自由かどうかを判断します。もし自由であれば、セッションの接続識別子を返します。そうでなければ、NULLを返します。

結論

この記事では、MySQLデータベースにおけるロックの扱いについて探りました。特定のテーブルにロックを取得する方法、テーブルのロックを解除する方法、ロックが解放されているかどうかを確認する方法について説明しました。