mysql では、ストアド プロシージャは、特定の機能を実行するために設計された一連の SQL ステートメントです。ストアド プロシージャを使用する目的は、SQL ステートメントで一般的または複雑な作業を事前に作成し、指定した名前で保存することです。このプロシージャはコンパイルおよび最適化されてデータベース サーバーに保存されるため、ストアド プロシージャと呼ばれます。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
ストアド プロシージャは、複雑なプログラムをデータベースに保存し、外部プログラムから呼び出せるようにするデータベース オブジェクトです。
ストアド プロシージャは、特定の機能を実行するために設計された一連の SQL ステートメントです。ストアド プロシージャを使用する目的は、SQL ステートメントで一般的または複雑な作業を事前に作成し、指定した名前で保存することです。このプロシージャはコンパイルおよび最適化されてデータベース サーバーに保存されるため、ストアド プロシージャと呼ばれます。将来、定義したストアド プロシージャと同じサービスをデータベースで提供する必要がある場合は、「CALL ストアド プロシージャ名」を呼び出すだけで自動的に完了します。
データベースの操作に一般的に使用される SQL ステートメントは、最初にコンパイルし、実行時に実行する必要があります。ストアド プロシージャは、別のアプローチで SQL ステートメントを実行します。
ストアド プロシージャは、データベースに作成および保存されるプログラム可能な関数であり、通常は SQL ステートメントといくつかの特別な制御構造で構成されます。ストアド プロシージャは、異なるアプリケーションまたはプラットフォームで同じ特定の機能を実行する場合に特に適しています。
MySQL 5.0 バージョンは以前はストアド プロシージャをサポートしていなかったので、MySQL のアプリケーションが大幅に減少しました。 MySQL はバージョン 5.0 からストアド プロシージャをサポートしています。これにより、データベースの処理速度が向上するだけでなく、データベース プログラミングの柔軟性も向上します。
ストアド プロシージャはデータベースの重要な機能です。ストアド プロシージャを使用できます。データを変換するための、データ移行やレポート作成のためのプログラミング言語に似ており、一度正常に実行されると、いつでも呼び出すことができ、指定された機能操作を完了できます。
ストアド プロシージャを使用すると、データベース アクセスの効率が向上するだけでなく、データベース使用のセキュリティも向上します。
呼び出し元にとって、ストアド プロシージャは SQL ステートメントをカプセル化するため、呼び出し元は論理関数の特定の実装プロセスを考慮する必要がありません。簡単な呼び出しだけで、JavaやC#などのプログラミング言語から呼び出すことができます。
ストアド プロシージャの作成
CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成できます。構文形式は次のとおりです。 :
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[プロシージャ パラメータ[,…]] 形式
[ IN | OUT | INOUT ] <参数名> <类型>
構文は次のとおりです:
1) プロシージャ名
Theストアド プロシージャの名前。デフォルトで現在のデータベースに作成されます。特定のデータベースにストアド プロシージャを作成する必要がある場合は、名前の前にデータベースの名前 (db_name.sp_name) を付けます。
名前には、MySQL 組み込み関数と同じ名前を選択しないように注意してください。そうしないと、エラーが発生します。
2) プロセス パラメーター
ストアド プロシージャのパラメーター リスト。このうち、
MySQL ストアド プロシージャは、入力パラメータ、出力パラメータ、入出力パラメータという 3 種類のパラメータをサポートしており、それぞれ IN、OUT、INOUT の 3 つのキーワードで識別されます。このうち、入力パラメータはストアド プロシージャに渡すことができ、出力パラメータはストアド プロシージャが演算結果を返す必要がある場合に使用され、入出力パラメータは入力パラメータと出力パラメータの両方として機能します。
パラメータ名はデータ テーブルの列名と同じであってはいけないことに注意してください。そうでない場合、エラー メッセージは返されませんが、ストアド プロシージャの SQL ステートメントはパラメータ名を考慮します。列名として使用するとエラーが発生しますが、結果は予測可能です。
3) プロシージャ本体
ストアド プロシージャの主要部分 (ストアド プロシージャ本体とも呼ばれます) には、プロシージャの呼び出し時に実行する必要がある SQL ステートメントが含まれています。このセクションはキーワード BEGIN で始まり、キーワード END で終わります。ストアド プロシージャ本体に SQL ステートメントが 1 つだけある場合は、BEGIN-END フラグを省略できます。
例:
ShowStuScore という名前のストアド プロシージャを作成します。ストアド プロシージャの機能は、学生の成績情報テーブルから学生の成績情報をクエリすることです。SQL ステートメントを入力します。実行プロセスは次のとおりです。
mysql> DELIMITER // mysql> CREATE PROCEDURE ShowStuScore() -> BEGIN -> SELECT * FROM tb_students_score; -> END // Query OK, 0 rows affected (0.09 sec)
結果は、ShowStuScore ストアド プロシージャが正常に作成されたことを示しています。
ストアド プロシージャの削除
ストアド プロシージャは作成されると、削除されるまでデータベース サーバーに保存されます。 MySQL データベースに古いストアド プロシージャがある場合は、それをデータベースから削除する必要があります。
MySQL の DROP PROCEDURE ステートメントを使用して、データベースにすでに存在するストアド プロシージャを削除します。構文形式は次のとおりです。
DROP PROCEDURE [ IF EXISTS ] <过程名>
構文の説明は次のとおりです。
プロセス名: 削除するストアド プロシージャの名前を指定します。
IF EXISTS:指定这个关键字,用于防止因删除不存在的存储过程而引发的错误。
注意:存储过程名称后面没有参数列表,也没有括号,在删除之前,必须确认该存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。
实例
下面删除存储过程 ShowStuScore,SQL 语句和运行结果如下:
mysql> DROP PROCEDURE ShowStuScore; Query OK, 0 rows affected (0.08 sec)
删除后,可以通过查询 information_schema 数据库下的 routines 表来确认上面的删除是否成功。SQL 语句和运行结果如下:
mysql> SELECT * FROM information_schema.routines WHERE routine_name='ShowStuScore'; Empty set (0.03 sec)
结果显示,没有查询出任何记录,说明存储过程 ShowStuScore 已经被删除了。
(推荐教程:mysql视频教程)
以上がmysqlのストアドプロシージャとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。