ホームページ >データベース >mysql チュートリアル >データベース ストアド プロシージャの作成方法
ストアド プロシージャの概要
SQL ステートメントは最初にコンパイルしてから実行する必要があり、ストアド プロシージャ (ストアド プロシージャ) は特定の関数を完了するための SQL ステートメントのセットです。データベース内で、ユーザーは名前を指定し、パラメーターを指定することによって (ストアド プロシージャにパラメーターがある場合)、ストアド プロシージャを呼び出して実行します。ストアド プロシージャは、データベースに作成および保存されるプログラム可能な関数であり、SQL ステートメントと制御構造で構成できます。ストアド プロシージャは、異なるアプリケーションやプラットフォームで同じ機能を実行する場合、または特定の機能をカプセル化する場合に便利です。データベース内のストアド プロシージャは、プログラミングにおけるオブジェクト指向アプローチのシミュレーションとみなすことができ、これによりデータへのアクセス方法を制御できます。
推奨コース: MySql チュートリアル 。
ストアドプロシージャのメリット:
(1). SQLの機能強化言語と柔軟性: ストアド プロシージャは制御ステートメントを使用して作成でき、強力な柔軟性があり、複雑な判断やより複雑な操作を完了できます。
(2). 標準コンポーネント プログラミング: ストアド プロシージャを作成した後は、ストアド プロシージャの SQL ステートメントを書き直すことなく、プログラム内で複数回呼び出すことができます。また、データベースの専門家は、アプリケーションのソース コードに影響を与えることなく、いつでもストアド プロシージャを変更できます。
(3). 実行速度の高速化: 操作に大量の Transaction-SQL コードが含まれる場合、または複数回実行される場合、ストアド プロシージャはバッチ処理よりもはるかに高速に実行されます。ストアド プロシージャはプリコンパイルされているためです。ストアド プロシージャが初めて実行されるとき、オプティマイザによってクエリが分析および最適化され、最終的に実行プランがシステム テーブルに保存されます。バッチ Transaction-SQL ステートメントは、実行するたびにコンパイルして最適化する必要があり、速度は比較的遅くなります。
(4). ネットワーク トラフィックの削減: 同じデータベース オブジェクトに対する操作 (クエリ、変更など) の場合、この操作に含まれる Transaction-SQL ステートメントがストアド プロシージャに編成されている場合、トランザクションがストアド プロシージャが呼び出されるとき、呼び出しステートメントのみがネットワーク経由で送信されるため、ネットワーク トラフィックが大幅に削減され、ネットワーク負荷が軽減されます。
(5). セキュリティ機構として活用する:特定のストアドプロシージャの実行権限を制限することで、該当するデータへのアクセス権限を制限し、不正なユーザーによるアクセスを回避することができます。データにアクセスし、データのセキュリティを確保します。
MySQL のストアド プロシージャ
ストアド プロシージャはデータベースの重要な機能です。MySQL 5.0 は以前はストアド プロシージャをサポートしていなかったので、MySQL のアプリケーションが大幅に減少しました。幸いなことに、MySQL 5.0 ではストアド プロシージャのサポートが開始されており、データベースの処理速度が大幅に向上し、データベース プログラミングの柔軟性も向上します。
MySQL ストアド プロシージャの作成
構文
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体 DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
デリミタ
# # MySQL はデフォルトで区切り文字として「;」を使用します。区切り文字が宣言されていない場合、コンパイラはストアド プロシージャを SQL ステートメントとして扱い、コンパイル プロセスでエラーが報告されるため、「DELIMITER //」を使用して宣言する必要があります。これにより、コンパイラは 2 つの「//」の間の内容をストアド プロシージャのコードとみなして、これらのコードを実行しなくなります。「DELIMITER;」は区切り文字を復元することを意味します。パラメータ
ストアド プロシージャには、必要に応じて入力、出力、入力および出力パラメータを含めることができます。複数のパラメータがある場合は、「,」を使用して区切ります。 MySQL ストアド プロシージャのパラメータは、ストアド プロシージャの定義で使用されます。パラメータ タイプには、IN、OUT、INOUT の 3 つがあります: IN パラメータの値は、ストアド プロシージャを呼び出すときに指定する必要があります。ストアド プロシージャ内のパラメータです。値は返せず、デフォルト値です。 OUT: ストアド プロシージャ内で値を変更でき、返すことができます。 INOUT: 呼び出し時に指定され、変更して返すことができます。
プロシージャ本体
プロセス本体の開始と終了は、BEGIN と END によって識別されます。まとめ
形式は次のとおりです: Create プロシージャ|関数([[IN |OUT |INOUT] パラメーター 名前 データ型...])
は、ストアド プロシージャを呼び出すときにこのパラメーターの値を指定する必要があることを示します。このパラメーターの値が変更された場合ストアド プロシージャの実行中は返すことができず、これがデフォルト値です。
OUT 出力パラメータ
この値はストアド プロシージャ内で変更でき、返すことができます
INOUT 入力および出力パラメータ
呼び出し時に指定され、変更して返すことができます
INとOUTについては実験で体験しましたが、主にINOUTの理解でしたので例を示します:
パラメータinoutの使用例(値の入力と値の渡しの両方が可能)
ステートメント関数: 年齢を渡し、自動的に年齢を 10 歳ずつ増やします
create プロシージャ p3(inout age int)
begin
set age:=age 10;
end
where: 呼び出されたとき、 inout 型のパラメータ値は入力型と出力型の両方です。それに値を与えます。値は変数ではないため、最初に変数を設定して値を初期化する必要があります。その後、呼び出し時に変数を直接渡すだけです。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
ストアド プロシージャを作成して実行した後の実行結果は次のとおりです。
以上がデータベース ストアド プロシージャの作成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。