MySQL 関数とカスタムロジック

MySQLBeginner
オンラインで実践に進む

はじめに

この実験では、MySQL でカスタム関数を作成して使用する方法を学びます。この実験では、長方形の面積を計算する関数を作成することにより、データベース内で再利用可能なロジックをカプセル化することに焦点を当てます。

手順には、MySQL サーバーへの接続、データベースの作成(必要な場合)、長さと幅の入力パラメータを持つ calculate_rectangle_area 関数の定義、および戻りデータ型の指定が含まれます。関数本体は面積を計算し、結果を返します。後続の手順では、この関数を SELECT クエリで使用する方法、サンプルデータでその出力をテストする方法、そして最後に、関数を削除する方法について説明します。

MySQL への接続とデータベースの作成

このステップでは、MySQL サーバーに接続し、カスタム関数を作成して使用するデータベースを作成します。

まず、ターミナルを開き、root ユーザーとして MySQL サーバーに接続します。以下のコマンドを実験の開始時に一度だけ実行してください。

sudo mysql -u root

このコマンドは、sudo を使用して mysql クライアントを root ユーザーとして実行します。この環境の root ユーザーにはパスワードが設定されていないため、直接 MySQL シェルに接続されます。mysql> プロンプトが表示されます。

以降のすべてのステップで MySQL シェル内に留まってください。実験の終了まで終了しないでください。

次に、my_functions_db という名前のデータベースを作成します。このデータベースは、テーブルと関数を格納するために使用されます。mysql> プロンプトで以下の SQL コマンドを実行してください。

CREATE DATABASE IF NOT EXISTS my_functions_db;

データベースを作成した後、それを選択して、以降の操作のデフォルトデータベースにします。

USE my_functions_db;

データベースが変更されたことを示すメッセージが表示されるはずです。

これで、my_functions_db データベースに接続され、次のステップでカスタム関数を作成する準備が整いました。

長方形の面積を計算する関数の作成

このステップでは、MySQL で長方形の面積を計算するためのカスタム関数を作成します。この関数は、長さと幅を入力として受け取り、計算された面積を返します。

前のステップで説明したように、MySQL シェルに接続しており、my_functions_db データベースが選択されていることを確認してください。

それでは、calculate_rectangle_area という名前の関数を作成します。この関数は、lengthwidth という 2 つの整数パラメータを受け取り、面積を表す整数を返します。

MySQL シェルで以下の SQL コマンドを実行してください。

DELIMITER //

CREATE FUNCTION calculate_rectangle_area (length INT, width INT)
RETURNS INT
DETERMINISTIC
BEGIN
  DECLARE area INT;
  SET area = length * width;
  RETURN area;
END //

DELIMITER ;

このコマンドの内訳を見てみましょう。

  • DELIMITER //: これは、ステートメントの区切り文字をデフォルトのセミコロン (;) から // に変更します。関数定義の本体内にセミコロンが含まれているため、これは必要です。
  • CREATE FUNCTION calculate_rectangle_area (length INT, width INT): これは、関数名 (calculate_rectangle_area) とその入力パラメータ (length および width、両方とも INT 型) を定義します。
  • RETURNS INT: これは、関数が整数値を返すことを指定します。
  • DETERMINISTIC: このキーワードは、関数が同じ入力値に対して常に同じ出力を生成することを示します。これは、MySQL が関数を使用するクエリを最適化するのに役立ちます。
  • BEGIN ... END: このブロックは、関数のロジックを含みます。
  • DECLARE area INT;: これは、関数内で area という名前のローカル変数を INT 型で宣言します。
  • SET area = length * width;: これは、lengthwidth パラメータを乗算して面積を計算し、その結果を area 変数に代入します。
  • RETURN area;: これは、area 変数に格納されている値を関数の出力として返します。
  • END //: これは、一時的な区切り文字 // を使用して、関数定義の終了を示します。
  • DELIMITER ;: これは、区切り文字をデフォルトのセミコロン (;) に戻します。

このコマンドを実行すると、calculate_rectangle_area 関数が my_functions_db データベースに作成されます。

関数が正常に作成されたことを確認するには、現在のデータベース内の関数を一覧表示できます。

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

このコマンドは関数の情報を表示し、その存在を確認します。

SELECT クエリでの関数の使用

calculate_rectangle_area 関数を作成したので、テーブルに格納されているデータに基づいて長方形の面積を計算するために、SELECT クエリで使用できます。

同じ MySQL シェルセッションで作業を続け、my_functions_db データベースを使用していることを確認してください。

まず、さまざまな長方形の寸法を格納するために rectangles という名前のテーブルを作成しましょう。以下の SQL コマンドを実行してください。

CREATE TABLE IF NOT EXISTS rectangles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  length INT,
  width INT
);

このコマンドは、自動インクリメントされる id を主キーとし、lengthwidth の列を持つテーブルを作成します。

次に、rectangles テーブルにサンプルデータを挿入します。

INSERT INTO rectangles (length, width) VALUES (5, 10);
INSERT INTO rectangles (length, width) VALUES (7, 8);
INSERT INTO rectangles (length, width) VALUES (12, 3);

これらのコマンドは、異なる長さと幅の値を持つ 3 つの行を rectangles テーブルに追加します。

これで、SELECT クエリで calculate_rectangle_area 関数を使用して、長方形の寸法とその計算された面積を取得できます。以下の SQL コマンドを実行してください。

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

このクエリでは:

  • SELECT id, length, width: これは、rectangles テーブルから idlengthwidth 列を選択します。
  • calculate_rectangle_area(length, width): これは、calculate_rectangle_area 関数を呼び出し、各行の length および width 列の値を引数として渡します。
  • AS area: これは、関数が返す結果にエイリアス area を割り当て、出力列を読みやすくします。
  • FROM rectangles: これは、データを rectangles テーブルから取得することを指定します。

このクエリの出力は、テーブル内の各長方形の idlengthwidth、および計算された area を表示します。以下のような出力が表示されるはずです。

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
+----+--------+-------+------+

これにより、カスタム関数を標準的な SQL クエリ内で効果的に使用して、データに対する計算を実行する方法が示されます。

サンプルデータでの関数出力テスト

このステップでは、rectangles テーブルにさらにサンプルデータを挿入し、計算された面積を確認することで、calculate_rectangle_area 関数をさらにテストします。これにより、関数がさまざまな入力値で正しく機能することを確認できます。

同じ MySQL シェルセッションで作業を続け、my_functions_db データベースを使用していることを確認してください。

次に、異なる長さと幅の値を持つ追加の行を rectangles テーブルに挿入します。

INSERT INTO rectangles (length, width) VALUES (10, 10);
INSERT INTO rectangles (length, width) VALUES (2, 5);
INSERT INTO rectangles (length, width) VALUES (15, 4);

これらのコマンドは、さらに 3 つの行を rectangles テーブルに追加します。

次に、SELECT クエリを再度実行して、新しく追加されたものを含むすべての長方形の計算された面積を確認します。

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

出力には、新しい長方形の面積も含まれるようになります。

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
|  4 |     10 |    10 |  100 |
|  5 |      2 |     5 |   10 |
|  6 |     15 |     4 |   60 |
+----+--------+-------+------+

出力を確認し、新しい行の計算された面積が正しいことを確認してください。

  • 長さ 10、幅 10 の場合、面積は 100(10 * 10)です。
  • 長さ 2、幅 5 の場合、面積は 10(2 * 5)です。
  • 長さ 15、幅 4 の場合、面積は 60(15 * 4)です。

このステップにより、さまざまなデータで関数を使用する方法についての理解が深まり、その正確性が確認されます。

関数とテーブルの削除

この最終ステップでは、calculate_rectangle_area 関数と rectangles テーブルを削除してデータベースをクリーンアップします。これは、不要になったオブジェクトを削除するための良い習慣です。

同じ MySQL シェルセッションで作業を続け、my_functions_db データベースを使用していることを確認してください。

まず、calculate_rectangle_area 関数を削除しましょう。以下の SQL コマンドを実行してください。

DROP FUNCTION IF EXISTS calculate_rectangle_area;
  • DROP FUNCTION: このコマンドは関数を削除するために使用されます。
  • IF EXISTS: この句は、関数が存在しない場合にエラーを防ぎます。

次に、rectangles テーブルを削除しましょう。以下の SQL コマンドを実行してください。

DROP TABLE IF EXISTS rectangles;
  • DROP TABLE: このコマンドはテーブルを削除するために使用されます。
  • IF EXISTS: この句は、テーブルが存在しない場合にエラーを防ぎます。

これらのコマンドを実行すると、関数とテーブルの両方が my_functions_db データベースから削除されます。

関数が削除されたことを確認するために、再度関数を一覧表示してみてください。

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

このコマンドは、関数がなくなったことを示す空の結果セットを返すはずです。

テーブルが削除されたことを確認するために、テーブルから選択してみてください。

SELECT * FROM rectangles;

このコマンドは、ERROR 1146 (42S02): Table 'my_functions_db.rectangles' doesn't exist のようなエラーを返し、テーブルがなくなったことを示します。

これで、exit と入力して Enter キーを押すことで、MySQL シェルを終了できます。

MySQL でカスタム関数とテーブルを正常に作成、使用、テスト、および削除しました。

まとめ

この実験では、再利用可能なロジックをカプセル化するために MySQL に関数をを作成する方法を学びました。このプロセスには、MySQL サーバーへの接続、データベースの作成(必要な場合)、そして入力パラメータ、戻りデータ型、および DETERMINISTIC キーワードを持つ関数の定義が含まれていました。

具体的には、長方形の長さと幅を入力として受け取り、その面積を返す calculate_rectangle_area 関数を作成しました。関数の本体には、計算された面積を格納するためのローカル変数を宣言し、RETURN ステートメントを使用して結果を返すことが含まれていました。

次に、この関数を SELECT クエリで使用して、テーブルに格納されたデータに対して計算を実行する方法を学びました。また、追加のサンプルデータで関数をテストして、その正確性を確保しました。最後に、データベース環境をクリーンアップするために、関数とテーブルを削除する方法を学びました。

この実験は、MySQL でカスタム関数を作成および使用するための実践的な入門を提供しました。これは、ロジックをカプセル化し、データベース操作の効率を向上させるための貴重なスキルです。