ホームページ >データベース >mysql チュートリアル >データベース ストアド プロシージャの作成方法

データベース ストアド プロシージャの作成方法

(*-*)浩
(*-*)浩オリジナル
2019-05-07 09:53:205804ブラウズ

ストアド プロシージャの概要

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 によって識別されます。

まとめ

今回は主にストアドプロシージャの使い方をマスターしましたが、一般にストアドプロシージャは実はCの関数に似ています。この関数は、この処理を作成するファイル内で呼び出す必要がありますが、ストアド プロシージャの場合は、この操作プロセスをデータベースに格納するのと同等であり、call を使用して呼び出し、一部のパラメータと結果を入力または出力することができます。

最も印象的なのは、「in n int」や「out sum int」といった入出力の定義です。関連ブログを見ると、入出力定義の使用規則をまとめると次のようになります。

MySQL ストアド プロシージャのパラメータはストアド プロシージャの定義で使用されます。パラメータ タイプは 3 つあります。

IN、OUT、INOUT

形式は次のとおりです: Create プロシージャ|関数([[IN |OUT |INOUT] パラメーター 名前 データ型...])

IN 入力パラメーター

は、ストアド プロシージャを呼び出すときにこのパラメーターの値を指定する必要があることを示します。このパラメーターの値が変更された場合ストアド プロシージャの実行中は返すことができず、これがデフォルト値です。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。