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 でマークされます。まとめ
IN、OUT、INOUT の 3 つです。形式は次のとおりです。 function([[IN |OUT | INOUT ] パラメータ名のデータ型...])
IN 入力パラメータ
ストアド プロシージャを呼び出すときにこのパラメータの値を指定する必要があることを示します。ストアド プロシージャの実行中にこのパラメータの値が変更された場合、その値を返すことはできず、デフォルト値
OUT 出力パラメータ
この値はストアド プロシージャ内で変更でき、返すことができます。
INOUT 入力および出力パラメータ
この値は呼び出し時に指定でき、返せる 変更されて返される
IN と OUT は実験で経験しており、主に INOUT の理解に役立ちます。 ##パラメータinoutの使用例(値の入力と値の渡しの両方が可能)
ステートメント関数:年齢を渡し、年齢を自動的に10歳ずつ増やすプロシージャp3(inout age int)を作成
begin
set age:=age 10;
end
その中で: 呼び出すとき、inout パラメーターの値は入力型と出力型の両方です。それに値を与えます。値は変数ではありません。 , そのため、最初に変数を設定して値を初期化する必要があります。呼び出し時にこれを直接渡します。変数だけです。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
ストアド プロシージャを作成して実行した後の実行結果は次のとおりです。
以上がデータベースストアドプロシージャの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。