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

MySQLMySQLBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/BasicKeywordsandStatementsGroup -.-> mysql/delete("Data Deletion") subgraph Lab Skills mysql/use_database -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} mysql/create_database -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} mysql/create_table -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} mysql/select -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} mysql/insert -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} mysql/delete -.-> lab-550908{{"MySQL の関数とカスタムロジック"}} end

値を計算する関数を作成する

このステップでは、MySQL で関数を作成する方法を学びます。関数は、データベース内に再利用可能なロジックをカプセル化する強力な手段です。ここでは、長方形の面積を計算する単純な関数を作成します。

まず、MySQL サーバーに接続しましょう。ターミナルを開き、次のコマンドを実行します。

mysql -u root -p

root パスワードの入力を求められます。パスワードを入力し、Enter キーを押します。

次に、作業用のデータベースを作成しましょう。既に使用したいデータベースがある場合は、このステップをスキップできます。そうでない場合は、次の SQL コマンドを実行します。

CREATE DATABASE IF NOT EXISTS my_functions_db;
USE my_functions_db;

次に、関数を作成します。MySQL で関数を作成する構文は次の通りです。

CREATE FUNCTION function_name (parameter1 data_type, parameter2 data_type, ...)
RETURNS return_data_type
DETERMINISTIC
BEGIN
  -- Function body
  RETURN return_value;
END;
  • function_name: 関数の名前。
  • parameter1, parameter2, ...: 関数の入力パラメーターとそのデータ型。
  • return_data_type: 関数が返す値のデータ型。
  • DETERMINISTIC: このキーワードは、関数が同じ入力値に対して常に同じ結果を返すことを示します。最適化のために重要です。
  • BEGINEND: これらのキーワードは関数本体を囲みます。
  • RETURN return_value: この文は、関数によって計算された値を返します。

では、長方形の長さと幅を入力として受け取り、その面積を返す calculate_rectangle_area という関数を作成しましょう。次の SQL コマンドを実行します。

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

この関数では:

  • 2 つの入力パラメーター lengthwidth を宣言し、どちらも INT 型です。
  • 関数は INT 型の値を返し、これは長方形の面積を表します。
  • 計算された面積を格納するために、INT 型のローカル変数 area を宣言します。
  • 長さと幅を掛け合わせて面積を計算し、area 変数に格納します。
  • 最後に、area 変数の値を返します。

関数が正常に作成されたことを確認するには、次の SQL コマンドを実行できます。

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

このコマンドは、calculate_rectangle_area 関数に関する情報を表示します。これには、関数名、データベース、作成日が含まれます。

SELECT クエリで関数を使用する

このステップでは、前のステップで作成した関数を SELECT クエリ内で使用する方法を学びます。これにより、関数のロジックをデータベーステーブルから取得したデータに適用することができます。

まず、MySQL サーバーに接続し、my_functions_db データベース(または関数を作成したデータベース)を使用していることを確認してください。接続を閉じた場合は、次のコマンドを使用して再接続します。

mysql -u root -p

次に、データベースを選択します。

USE my_functions_db;

では、異なる長方形の長さと幅を格納する rectangles という名前のテーブルを作成しましょう。次の SQL コマンドを実行します。

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

このコマンドは、3 つの列を持つテーブルを作成します。

  • id: 主キーとして機能する自動増分整数。
  • length: 長方形の長さを表す整数。
  • width: 長方形の幅を表す整数。

次に、rectangles テーブルにいくつかのサンプルデータを挿入しましょう。次の SQL コマンドを実行します。

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

rectangles テーブルにデータが入ったので、SELECT クエリで calculate_rectangle_area 関数を使用して、各長方形の面積を計算できます。次の SQL コマンドを実行します。

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

このクエリは、rectangles テーブルから idlengthwidth 列を取得し、length 列と width 列を入力として calculate_rectangle_area 関数を呼び出します。関数呼び出しの結果は area という別名で表示されます。

クエリの出力は、idlengthwidtharea の 4 つの列を持つテーブルになります。area 列には、各長方形の計算された面積が含まれます。

次のような出力が表示されるはずです。

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

これは、SELECT クエリで関数を使用して、テーブルから取得したデータに対して計算を行う方法を示しています。

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

このステップでは、異なるサンプルデータを使用して関数の出力をテストし、正しく動作していることを確認します。rectangles テーブルに新しいデータを挿入し、calculate_rectangle_area 関数を使用して計算された面積を検証します。

まず、MySQL サーバーに接続し、my_functions_db データベースを使用していることを確認してください。接続を閉じた場合は、次のコマンドを使用して再接続します。

mysql -u root -p

次に、データベースを選択します。

USE my_functions_db;

では、rectangles テーブルに長さと幅の異なるサンプルデータをさらに挿入しましょう。次の SQL コマンドを実行します。

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 テーブルに挿入します。

  • 長さ = 10、幅 = 10
  • 長さ = 2、幅 = 5
  • 長さ = 15、幅 = 4

では、calculate_rectangle_area 関数を使用した SELECT クエリを使って、新しく挿入されたものを含むすべての長方形の面積を計算しましょう。次の SQL コマンドを実行します。

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

このクエリは、rectangles テーブルからすべての行を取得し、calculate_rectangle_area 関数を使用して各長方形の面積を計算します。

クエリの出力には、新しい長方形の面積が含まれるはずです。

+----+--------+-------+------+
| 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 = 100)。
  • 長さ 2、幅 5 の長方形の面積は 10 です (2 * 5 = 10)。
  • 長さ 15、幅 4 の長方形の面積は 60 です (15 * 4 = 60)。

計算された面積が正しければ、calculate_rectangle_area 関数が期待通りに動作していることが確認できます。このステップでは、様々な入力で関数をテストすることで、関数の信頼性を確保します。

関数を削除する

このステップでは、先ほど作成した関数を削除する方法を学びます。関数を削除すると、その関数はデータベースから取り除かれます。したがって、削除する前にその関数がもう必要ないことを確認することが重要です。

まず、MySQL サーバーに接続し、my_functions_db データベースを使用していることを確認してください。接続を閉じた場合は、次のコマンドを使用して再接続します。

mysql -u root -p

次に、データベースを選択します。

USE my_functions_db;

calculate_rectangle_area 関数を削除するには、次の SQL コマンドを実行します。

DROP FUNCTION IF EXISTS calculate_rectangle_area;
  • DROP FUNCTION: これは関数を削除するために使用される SQL コマンドです。
  • IF EXISTS: この句は、関数が存在しない場合にエラーが発生するのを防ぎます。予期しないエラーを避けるためにこれを含めるのが良い習慣です。
  • calculate_rectangle_area: これは削除したい関数の名前です。

このコマンドを実行すると、calculate_rectangle_area 関数は my_functions_db データベースから削除されます。

関数が削除されたことを確認するには、関数を使用して rectangles テーブルから選択を試みることができます。次の SQL コマンドを実行します。

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

このコマンドは、calculate_rectangle_area 関数がもう存在しないため、エラーを返すはずです。エラーメッセージは次のようになります。ERROR 1305 (42000): FUNCTION my_functions_db.calculate_rectangle_area does not exist

あるいは、SHOW FUNCTION STATUS コマンドを再度使用することもできます。

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

このコマンドは空の結果セットを返し、関数がもう存在しないことを示します。

関数を削除することで、その関数をデータベースから取り除き、リソースを解放しました。もう必要ないと確信した関数のみを削除するようにしてください。

まとめ

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

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