MySQL でストアド プロシージャを使用する方法
著者は寄付プログラムへの書き込みを選択しました。
序章
通常、リレーショナル データベースを操作する場合、アプリケーション コード内から直接、個々の DELETE
を発行します。これらのステートメントは、基礎となるデータベース テーブルで直接動作し、操作します。同じデータベースにアクセスする複数のアプリケーション内で同じステートメントまたはステートメントのグループが使用されている場合、個々のアプリケーションでそれらが重複していることがよくあります。
MySQL は、他の多くのリレーショナル データベース管理システムと同様に、ストアド プロシージャの使用をサポートしています。ストアド プロシージャを使用すると、1 つまたは複数の SQL ステートメントをグループ化して共通の名前で再利用し、共通のビジネス ロジックをデータベース自体にカプセル化できます。このようなプロシージャは、データベースにアクセスして一貫した方法でデータを取得または操作するアプリケーションから呼び出すことができます。
ストアド プロシージャを使用すると、複数のアプリケーションで使用される共通タスク用の再利用可能なルーチンを作成したり、データ検証を提供したり、データベース ユーザーが基になるテーブルに直接アクセスしたり、任意のクエリを発行したりすることを制限することで、データ アクセス セキュリティの追加レイヤーを提供できます。
このチュートリアルでは、ストアド プロシージャとは何か、データを返し、入力パラメーターと出力パラメーターの両方を使用する基本的なストアド プロシージャを作成する方法を学習します。
前提条件
このガイドに従うには、SQL ベースのリレーショナル データベース管理システム (RDBMS) を実行しているコンピューターが必要です。このガイドの手順と例は、次の環境を使用して検証されました。
- Ubuntu 20.04 の初期サーバー セットアップ ガイドで説明されているように、管理者権限を持つ非 root ユーザーと UFW で構成されたファイアウォールを使用して、Ubuntu 20.04 を実行しているサーバー。
- ステップ 3 で説明したように、MySQL をサーバーにインストールして保護します。
SELECT
クエリを実行してデータベースからデータを取得する方法についての基本的な知識
注: 多くの RDBMS は独自の独自の SQL 実装を使用しており、ストアド プロシージャの構文は公式の SQL 標準の一部ではないことに注意してください。このチュートリアルで説明されているコマンドは他の RDBMS でも機能する可能性がありますが、ストアド プロシージャはデータベース固有であるため、MySQL 以外のシステムでテストすると、正確な構文または出力が異なる場合があります。
また、ストアド プロシージャの使用方法を示すテーブルを作成できる空のデータベースも必要です。 MySQL サーバーへの接続と、このガイド全体の例で使用されるテスト データベースの作成の詳細については、次の「MySQL への接続とサンプル データベースのセットアップ」セクションを参照することをお勧めします。
MySQL への接続とサンプル データベースのセットアップ
このセクションでは、このガイドの例に従うことができるように、MySQL サーバーに接続してサンプル データベースを作成します。
このガイドでは、架空の車のコレクションを使用します。現在所有している車の詳細を、メーカー、モデル、製造年、および価値とともに保存します。
SQL データベース システムがリモート サーバーで実行されている場合は、ローカル マシンからサーバーに SSH 接続します。
- ssh sammy@your_server_ip
次に、MySQL サーバー プロンプトを開き、sammy
を MySQL ユーザー アカウントの名前に置き換えます。
- mysql -u sammy -p
procedures
という名前のデータベースを作成します。
- CREATE DATABASE procedures;
データベースが正常に作成された場合、次のような出力が表示されます。
OutputQuery OK, 1 row affected (0.01 sec)
procedures
データベースを選択するには、次の USE
ステートメントを実行します。
- USE procedures;
次の出力が表示されます。
OutputDatabase changed
データベースを選択したら、その中にサンプル テーブルを作成できます。テーブル cars
には、データベース内の自動車に関する簡略化されたデータが含まれます。次の列が保持されます。
make
: この列には、最大100
文字のvarchar
データ型を使用して表現された、各所有車のメーカーが保持されます。< /li>model
: この列には、最大100
文字のvarchar
データ型を使用して表現された車のモデル名が保持されます。年
: この列には、自動車の製造年がint
データ型で格納され、数値が保持されます。value
: この列には、最大10
桁および2の
decimal
データ型を使用して車の値が格納されますcode> 小数点以下の桁。
次のコマンドでサンプル テーブルを作成します。
- CREATE TABLE cars (
- make varchar(100),
- model varchar(100),
- year int,
- value decimal(10, 2)
- );
次の出力が表示された場合、テーブルは作成されています。
OutputQuery OK, 0 rows affected (0.00 sec)
その後、次の INSERT INTO
操作を実行して、cars
テーブルにサンプル データをロードします。
- INSERT INTO cars
- VALUES
- ('Porsche', '911 GT3', 2020, 169700),
- ('Porsche', 'Cayman GT4', 2018, 118000),
- ('Porsche', 'Panamera', 2022, 113200),
- ('Porsche', 'Macan', 2019, 27400),
- ('Porsche', '718 Boxster', 2017, 48880),
- ('Ferrari', '488 GTB', 2015, 254750),
- ('Ferrari', 'F8 Tributo', 2019, 375000),
- ('Ferrari', 'SF90 Stradale', 2020, 627000),
- ('Ferrari', '812 Superfast', 2017, 335300),
- ('Ferrari', 'GTC4Lusso', 2016, 268000);
INSERT INTO
オペレーションは、5 つのポルシェと 5 つのフェラーリのモデルを含む 10 のサンプル スポーツ カーをテーブルに追加します。次の出力は、5 行すべてが追加されたことを示しています。
OutputQuery OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0
これで、ガイドの残りの部分に従い、SQL でストアド プロシージャの使用を開始する準備が整いました。
ストアド プロシージャの概要
MySQL およびその他の多くのリレーショナル データベース システムのストアド プロシージャは、1 つまたは複数の命令が配置された名前付きオブジェクトであり、呼び出されたときにデータベースによって順番に実行されます。最も基本的な例では、ストアド プロシージャは、よく使用されるフィルターを使用してデータベースからデータを取得するなど、再利用可能なルーチンの下に共通のステートメントを保存できます。たとえば、ストアド プロシージャを作成して、特定の月数以内に注文したオンライン ストアの顧客を取得できます。最も複雑なシナリオでは、ストアド プロシージャは、堅牢なアプリケーションの複雑なビジネス ロジックを記述する広範なプログラムを表すことができます。
ストアド プロシージャ内の一連の命令には、データを返したり操作したりする INSERT
クエリなどの一般的な SQL ステートメントを含めることができます。さらに、ストアド プロシージャは以下を利用できます。
- ストアド プロシージャに渡されるパラメータ、またはストアド プロシージャを介して返されるパラメータ
- 取得したデータをプロシージャ コード内で直接処理するための宣言済み変数
IF
命令やCASE
命令など、特定の条件に応じてストアド プロシージャ コードの一部を実行できる条件文。WHILE
、LOOP
、REPEAT
などのループを使用すると、コードの一部を複数回実行できます。取得したデータ セット- プロシージャにアクセスするデータベース ユーザーにエラー メッセージを返すなど、エラー処理の指示
- データベース内の他のストアド プロシージャの呼び出し
注: MySQL でサポートされている広範な構文により、堅牢なプログラムを記述し、ストアド プロシージャを使用して複雑な問題を解決できます。このガイドでは、ストアド プロシージャの本体、入力、および出力パラメーターで囲まれた SQL ステートメントを使用したストアド プロシージャの基本的な使用方法のみを扱います。変数、ループ、およびカスタマイズされたエラー処理を使用した条件付きコードの実行は、このガイドの範囲外です。 MySQL の公式ドキュメントでストアド プロシージャの詳細を確認することをお勧めします。
プロシージャがその名前で呼び出されると、データベース エンジンは命令ごとに定義どおりにプロシージャを実行します。
データベース ユーザーは、特定のプロシージャを実行するための適切な権限を持っている必要があります。このパーミッション要件は、安全に実行できることが保証されている個々のプロシージャへのアクセスをユーザーに許可する一方で、データベースへの直接アクセスを許可しないセキュリティ層を提供します。
ストアド プロシージャはデータベース サーバー上で直接実行され、すべての計算をローカルで実行し、終了時にのみ結果を呼び出し元のユーザーに返します。
プロシージャの動作を変更する場合は、データベース内のプロシージャを更新できます。これを使用しているアプリケーションは、新しいバージョンを自動的に取得します。すべてのユーザーは、アプリケーションを調整する必要なく、新しい手順コードをすぐに使用できるようになります。
ストアド プロシージャの作成に使用される SQL コードの一般的な構造を次に示します。
- DELIMITER //
- CREATE PROCEDURE procedure_name(parameter_1, parameter_2, . . ., parameter_n)
- BEGIN
- instruction_1;
- instruction_2;
- . . .
- instruction_n;
- END //
- DELIMITER ;
このコード フラグメントの最初と最後の命令は、DELIMITER //
と DELIMITER ;
です。通常、MySQL はセミコロン記号 (;
) を使用してステートメントを区切り、ステートメントの開始と終了を示します。セミコロンで区切られた MySQL コンソールで複数のステートメントを実行すると、それらは個別のコマンドとして扱われ、個別に次々と実行されます。ただし、ストアド プロシージャは、呼び出されたときに順次実行される複数のコマンドを囲むことができます。これは、MySQL に新しいプロシージャを作成するように指示しようとするときに問題を引き起こします。データベース エンジンは、ストアド プロシージャの本文にセミコロン記号があると判断し、ステートメントの実行を停止する必要があると判断します。この状況では、意図されたステートメントは、プロシージャ自体内の単一の命令ではなく、プロシージャ作成コード全体であるため、MySQL は意図を誤解します。
この制限を回避するには、DELIMITER
コマンドを使用して、 の間、一時的に区切り文字を
呼び出し。次に、ストアド プロシージャ本体内のすべてのセミコロンがそのままサーバーに渡されます。手順全体が終了すると、区切り文字は最後の ;
から //
に変更します。 CREATE PROCEDUREDELIMITER ;
で ;
に戻されます。
新しいプロシージャを作成するコードの核心は、CREATE PROCEDURE
呼び出しの後にプロシージャの名前を付けたものです: procedure_name
の例です。プロシージャ名の後には、プロシージャが受け入れるパラメータのオプションのリストが続きます。最後の部分はプロシージャ本体で、BEGIN
ステートメントと END
ステートメントで囲まれています。内部にはプロシージャ コードがあり、SELECT
クエリなどの単一の SQL ステートメントまたはより複雑なコードを含めることができます。
END
コマンドは、通常のセミコロンではなく、一時的な区切り文字である //
で終了します。
次のセクションでは、1 つのクエリを囲むパラメーターのない基本的なストアド プロシージャを作成します。
パラメータなしのストアド プロシージャの作成
このセクションでは、単一の SQL SELECT
ステートメントをカプセル化する最初のストアド プロシージャを作成して、メーカーと値によって降順で並べ替えられた所有車のリストを返します。
使用する SELECT
ステートメントを実行することから始めます。
- SELECT * FROM cars ORDER BY make, value DESC;
データベースは、cars
テーブルから車のリストを返します。このリストは、最初はメーカー順に並べられ、次に 1 つのメーカー内で値の降順で並べられます。
Output+---------+---------------+------+-----------+
| make | model | year | value |
+---------+---------------+------+-----------+
| Ferrari | SF90 Stradale | 2020 | 627000.00 |
| Ferrari | F8 Tributo | 2019 | 375000.00 |
| Ferrari | 812 Superfast | 2017 | 335300.00 |
| Ferrari | GTC4Lusso | 2016 | 268000.00 |
| Ferrari | 488 GTB | 2015 | 254750.00 |
| Porsche | 911 GT3 | 2020 | 169700.00 |
| Porsche | Cayman GT4 | 2018 | 118000.00 |
| Porsche | Panamera | 2022 | 113200.00 |
| Porsche | 718 Boxster | 2017 | 48880.00 |
| Porsche | Macan | 2019 | 27400.00 |
+---------+---------------+------+-----------+
10 rows in set (0.00 sec)
最も価値の高いフェラーリがリストの一番上に表示され、最も価値の低いポルシェが一番下に表示されます。
このクエリが複数のアプリケーションまたは複数のユーザーによって頻繁に使用されると想定し、すべてのユーザーがまったく同じ方法で結果を並べ替えるようにしたいとします。そのためには、そのステートメントを再利用可能な名前付きプロシージャの下に保存するストアド プロシージャを作成する必要があります。
このストアド プロシージャを作成するには、次のコード フラグメントを実行します。
- DELIMITER //
- CREATE PROCEDURE get_all_cars()
- BEGIN
- SELECT * FROM cars ORDER BY make, value DESC;
- END //
- DELIMITER ;
前のセクションで説明したように、最初と最後のコマンド (DELIMITER //
と DELIMITER ;
) は、MySQL にセミコロン文字をステートメント区切り文字として扱うのをやめるように指示します。手続き作成。
CREATE PROCEDURE
SQL コマンドの後には、プロシージャ名 get_all_cars
が続きます。これは、プロシージャの機能を最もよく説明するために定義できます。プロシージャ名の後に、パラメーターを追加できる一対の括弧 ()
があります。この例では、プロシージャはパラメーターを使用しないため、括弧は空です。次に、プロシージャ コード ブロックの開始と終了を定義する BEGIN
コマンドと END
コマンドの間に、以前に使用された SELECT
ステートメントがそのまま記述されます。
注: MySQL ユーザー権限によっては、CREATE PROCEDURE
コマンドの実行時にエラーが発生する場合があります: ERROR 1044 (42000): Access denied for user sammy@ localhost からデータベース プロシージャへ
。ストアド プロシージャを作成および実行する権限をユーザーに付与するには、root として MySQL にログインし、次のコマンドを実行します。必要に応じて MySQL ユーザー名とホストを置き換えます。
- GRANT CREATE ROUTINE, ALTER ROUTINE, EXECUTE on *.* TO 'sammy'@'localhost';
- FLUSH PRIVILEGES;
ユーザー権限を更新したら、root としてログアウトし、ユーザーとして再度ログインして、CREATE PROCEDURE
ステートメントを再実行します。
ストアド ルーチンおよび MySQL 権限のドキュメントで、ストアド プロシージャに関する権限をデータベース ユーザーに適用する方法について詳しく知ることができます。
データベースは成功メッセージで応答します。
OutputQuery OK, 0 rows affected (0.02 sec)
get_all_cars
プロシージャがデータベースに保存され、呼び出されると、保存されたステートメントがそのまま実行されます。
保存されたストアド プロシージャを実行するには、CALL
SQL コマンドに続けてプロシージャ名を使用できます。新しく作成したプロシージャを次のように実行してみてください。
- CALL get_all_cars;
このプロシージャーを使用するために必要なのは、プロシージャー名 get_all_cars
だけです。以前使用していた SELECT
ステートメントの一部を手動で入力する必要がなくなりました。データベースは、前に実行された SELECT
ステートメントからの出力と同じように結果を表示します。
Output+---------+---------------+------+-----------+
| make | model | year | value |
+---------+---------------+------+-----------+
| Ferrari | SF90 Stradale | 2020 | 627000.00 |
| Ferrari | F8 Tributo | 2019 | 375000.00 |
| Ferrari | 812 Superfast | 2017 | 335300.00 |
| Ferrari | GTC4Lusso | 2016 | 268000.00 |
| Ferrari | 488 GTB | 2015 | 254750.00 |
| Porsche | 911 GT3 | 2020 | 169700.00 |
| Porsche | Cayman GT4 | 2018 | 118000.00 |
| Porsche | Panamera | 2022 | 113200.00 |
| Porsche | 718 Boxster | 2017 | 48880.00 |
| Porsche | Macan | 2019 | 27400.00 |
+---------+---------------+------+-----------+
10 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
特定の方法で順序付けされた cars
テーブルからすべての車を返す、パラメーターなしのストアド プロシージャが正常に作成されました。この手順は、複数のアプリケーションで使用できます。
次のセクションでは、ユーザー入力に応じてプロシージャの動作を変更するパラメータを受け入れるプロシージャを作成します。
入力パラメータを持つストアド プロシージャの作成
このセクションでは、ストアド プロシージャの定義に入力パラメーターを含めて、プロシージャを実行するユーザーがストアド プロシージャにデータを渡せるようにします。たとえば、ユーザーはクエリ フィルターを提供できます。
前に作成したストアド プロシージャ get_all_cars
は、常に cars
テーブルからすべての車を取得しました。特定の製造年から車を検索する別の手順を作成してみましょう。これを可能にするために、プロシージャ定義で名前付きパラメータを定義します。
次のコードを実行します。
- DELIMITER //
- CREATE PROCEDURE get_cars_by_year(
- IN year_filter int
- )
- BEGIN
- SELECT * FROM cars WHERE year = year_filter ORDER BY make, value DESC;
- END //
- DELIMITER ;
前のセクションからのプロシージャ作成コードにいくつかの変更があります。
まず、名前は get_cars_by_year
で、手順を説明しています: 製造年に基づいて車を取得します。
以前は空だった括弧に、IN year_filter int
という 1 つのパラメーター定義が含まれるようになりました。 IN
キーワードは、パラメーターが呼び出し元のユーザーによってプロシージャーに渡されることをデータベースに伝えます。 year_filter
は、パラメーターの任意の名前です。これを使用して、プロシージャ コード内のパラメーターを参照します。最後に、int
はデータ型です。この場合、製造年は数値で表されます。
プロシージャ名の後に定義された year_filter
パラメータは、WHERE year=year_filter
句の SELECT
ステートメントに表示され、フィルタリング製造年に対する cars
テーブル。
データベースは、成功メッセージで再び応答します。
OutputQuery OK, 0 rows affected (0.02 sec)
以前と同じように、パラメーターを渡さずにプロシージャーを実行してみてください。
- CALL get_cars_by_year;
MySQL データベースはエラー メッセージを返します。
Error messageERROR 1318 (42000): Incorrect number of arguments for PROCEDURE procedures.get_cars_by_year; expected 1, got 0
今回は、ストアド プロシージャはパラメーターが提供されることを期待していますが、何も指定されていません。パラメーターを使用してストアド プロシージャを呼び出すには、プロシージャで期待される順序と同じ順序で、かっこ内にパラメーター値を指定できます。 2017
年に製造された車を取得するには、次のコマンドを実行します。
- CALL get_cars_by_year(2017);
これで、呼び出されたプロシージャが正しく実行され、その年の車のリストが返されます。
Output+---------+---------------+------+-----------+
| make | model | year | value |
+---------+---------------+------+-----------+
| Ferrari | 812 Superfast | 2017 | 335300.00 |
| Porsche | 718 Boxster | 2017 | 48880.00 |
+---------+---------------+------+-----------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
この例では、入力パラメーターをストアド プロシージャに渡し、それらをプロシージャ内のクエリで使用してフィルター処理オプションを提供する方法を学習しました。
次のセクションでは、出力パラメーターを使用して、1 回の実行で複数の異なる値を返すプロシージャを作成します。
入力パラメータと出力パラメータを持つストアド プロシージャの作成
前の両方の例で、作成したストアド プロシージャは SELECT
ステートメントを呼び出して結果セットを取得しました。ただし、場合によっては、個々のクエリに対して 1 つの結果セットを返すのではなく、複数の異なる値をまとめて返すストアド プロシージャが必要になることがあります。
コレクション内の自動車の台数や市場価値 (最小、最大、平均) など、特定の年の自動車に関する要約情報を提供するプロシージャを作成するとします。
これを行うには、新しいストアド プロシージャを作成するときに OUT
パラメータを使用できます。 IN
パラメータと同様に、OUT
パラメータには名前とデータ型が関連付けられています。ただし、ストアド プロシージャにデータを渡す代わりに、ストアド プロシージャによってデータを入力して、呼び出し元のユーザーに値を返すことができます。
出力パラメーターを使用して、特定の製造年の自動車に関する要約データを返す get_car_stats_by_year
プロシージャを作成します。
- DELIMITER //
- CREATE PROCEDURE get_car_stats_by_year(
- IN year_filter int,
- OUT cars_number int,
- OUT min_value decimal(10, 2),
- OUT avg_value decimal(10, 2),
- OUT max_value decimal(10, 2)
- )
- BEGIN
- SELECT COUNT(*), MIN(value), AVG(value), MAX(value)
- INTO cars_number, min_value, avg_value, max_value
- FROM cars
- WHERE year = year_filter ORDER BY make, value DESC;
- END //
- DELIMITER ;
今回は、製造年で車をフィルタリングするために使用される IN
パラメータ year_filter
とともに、括弧ブロック内に 4 つの OUT
パラメータが定義されています。 cars_number
パラメータは int
データ型で表され、コレクション内の車の数を返すために使用されます。 min_value
、avg_value
、および max_value
パラメータ市場価値を表し、decimal(10, 2)
型で定義されます (cars
テーブルの value
列に似ています)。これらは、コレクションから最も安い車と最も高い車に関する情報、および一致するすべての車の平均価格を返すために使用されます。
SELECT
ステートメントは、SQL 数学関数を使用して cars
テーブルから 4 つの値をクエリします。COUNT
を使用して車の総数を取得し、MIN を取得します。
、AVG
、および MAX
を使用して、value
列から最小値、平均値、および最大値を取得します。
ノート:
そのクエリの結果をストアド プロシージャの出力パラメータに格納する必要があることをデータベースに伝えるために、新しいキーワード INTO
が導入されています。 INTO
キーワードの後に、取得したデータに対応する 4 つのプロシージャ パラメータの名前がリストされます。これにより、MySQL は COUNT(*)
値を cars_number
パラメータ、MIN(value)
に保存します。 min_value
パラメーターなどになります。
データベースは、プロシージャの作成が成功したことを確認します。
OutputQuery OK, 0 rows affected (0.02 sec)
次に、次を実行して新しいプロシージャを実行します。
- CALL get_car_stats_by_year(2017, @number, @min, @avg, @max);
4 つの新しいパラメーターは @
記号で始まります。これらは、データを一時的に保存するために使用できる MySQL コンソールのローカル変数名です。作成したばかりのストアド プロシージャにそれらを渡すと、プロシージャはそれらの変数に値を挿入します。
データベースは次のように応答します。
OutputQuery OK, 1 row affected (0.00 sec)
これは、結果がすぐに画面に表示された以前の動作とは異なります。これは、ストアド プロシージャの結果が出力パラメーターに保存されており、クエリ結果として返されていないためです。結果にアクセスするには、次のように MySQL シェルで直接 SELECT
できます。
- SELECT @number, @min, @avg, @max;
このクエリでは、プロシージャを再度呼び出すのではなく、ローカル変数から値を選択しています。ストアド プロシージャはその結果をこれらの変数に保存し、データはシェルから切断するまで引き続き使用できます。
ノート:
出力には、クエリされた変数の値が表示されます。
Output+---------+----------+-----------+-----------+
| @number | @min | @avg | @max |
+---------+----------+-----------+-----------+
| 2 | 48880.00 | 192090.00 | 335300.00 |
+---------+----------+-----------+-----------+
1 row in set (0.00 sec)
値は、2017
で生産された自動車の数と、今年の生産からの自動車の最小、平均、および最大の市場価値に対応しています。
この例では、出力パラメーターを使用してストアド プロシージャ内から複数の異なる値を返し、後で使用する方法を学習しました。次のセクションでは、作成したプロシージャを削除する方法を学習します。
ストアド プロシージャの削除
このセクションでは、データベースに存在するストアド プロシージャを削除します。
作成した手順が不要になる場合があります。他の状況では、手順の動作方法を変更する必要がある場合があります。 MySQL では、作成後にプロシージャ定義を変更することはできません。そのため、最初にプロシージャを削除し、必要な変更を加えて再作成するしか方法はありません。
最後の手順 get_car_stats_by_year
を削除しましょう。これを行うには、DROP PROCEDURE
ステートメントを使用できます。
- DROP PROCEDURE get_car_stats_by_year;
データベースは、成功メッセージで手順の削除が成功したことを確認します。
OutputQuery OK, 0 rows affected (0.02 sec)
呼び出しを試みることで、プロシージャが削除されたことを確認できます。実行する:
- CALL get_car_stats_by_year(2017, @number, @min, @avg, @max);
今度は、プロシージャがデータベースに存在しないというエラー メッセージが表示されます。
Error messageERROR 1305 (42000): PROCEDURE procedures.get_car_stats_by_year does not exist
このセクションでは、データベース内の既存のストアド プロシージャを削除する方法を学習しました。
結論
このガイドに従って、ストアド プロシージャとは何か、MySQL でストアド プロシージャを使用して再利用可能なステートメントを名前付きプロシージャに保存し、後で実行する方法を学びました。パラメーターのないストアド プロシージャと、入力パラメーターと出力パラメーターを使用して柔軟性を高めるプロシージャを作成しました。
ストアド プロシージャを使用して、再利用可能なルーチンを作成し、複数のアプリケーション間でデータにアクセスするためのメソッドを統合するだけでなく、個々の SQL クエリによって与えられる可能性を超える複雑な動作を実装することができます。このチュートリアルでは、ストアド プロシージャの使用の基本のみを説明しました。詳細については、ストアド プロシージャに関する MySQL ドキュメントを参照してください。
SQL 言語とその操作に関するさまざまな概念について詳しく知りたい場合は、SQL の使用方法シリーズの他のガイドを確認することをお勧めします。