mysql ストアド プロシージャ: 最初にデータベース言語を操作します SQL ステートメントは、実行時に最初にコンパイルする必要があり、その後実行されます。ストアド プロシージャは、データベースに保存される特定の関数を完了するための一連の SQL ステートメントです。コンパイル後、ユーザーは名前を指定しパラメーターを指定することにより、ストアド プロシージャを呼び出して実行します。
#ストアド プロシージャの概要その他の関連する無料学習の推奨事項: mysql チュートリアル#(ビデオ)
一般的に使用されるオペレーティング データベース言語の SQL ステートメントは、最初にコンパイルしてから、実行時に実行する必要があります。ストアド プロシージャ (ストアド プロシージャ) は、特定の機能を完了するための一連の SQL ステートメントです。これはコンパイルされ、データベースに保存されます。ユーザーは、ストアド プロシージャの名前を指定し、パラメータを指定することによってそれを呼び出します (ストアド プロシージャにパラメータがある場合)。パラメータ)を指定して実行します。
ストアド プロシージャは、データベースに作成され保存されるプログラム可能な関数です。これは、SQL ステートメントといくつかの特殊な制御構造で構成されます。ストアド プロシージャは、異なるアプリケーションやプラットフォームで同じ機能を実行する場合、または特定の機能をカプセル化する場合に便利です。データベース内のストアド プロシージャは、プログラミングにおけるオブジェクト指向アプローチのシミュレーションとみなすことができます。これにより、データへのアクセス方法を制御できます。
ストアド プロシージャには、通常、次の利点があります。ストアド プロシージャは、SQL 言語の機能と柔軟性を強化します。ストアド プロシージャはフロー制御ステートメントを使用して作成でき、柔軟性が高く、複雑な判断やより複雑な操作を実行できます。
ストアド プロシージャを使用すると、標準コンポーネントをプログラムできます。ストアド プロシージャを作成した後は、ストアド プロシージャの SQL ステートメントを書き直すことなく、プログラム内でストアド プロシージャを複数回呼び出すことができます。また、データベースの専門家は、アプリケーションのソース コードに影響を与えることなく、いつでもストアド プロシージャを変更できます。
ストアド プロシージャを使用すると、より高速な実行速度を実現できます。操作に大量の Transaction-SQL コードが含まれている場合、または複数回実行される場合、ストアド プロシージャはバッチ処理よりもはるかに高速に実行されます。ストアド プロシージャはプリコンパイルされているためです。ストアド プロシージャが初めて実行されるとき、オプティマイザによってクエリが分析および最適化され、最終的に実行プランがシステム テーブルに保存されます。バッチ Transaction-SQL ステートメントは、実行するたびにコンパイルして最適化する必要があり、速度は比較的遅くなります。
ストアド プロシージャを使用すると、ネットワーク トラフィックを削減できます。同じデータベース オブジェクトに対する操作 (クエリ、変更など) の場合、この操作に関係する Transaction-SQL ステートメントがストアド プロシージャに編成されている場合、そのストアド プロシージャがクライアント コンピュータで呼び出されるとき、呼び出しのみが送信されます。これにより、ネットワーク トラフィックが大幅に増加し、ネットワーク負荷が軽減されます。
ストアド プロシージャはセキュリティ メカニズムとして十分に活用できます。システム管理者は、特定のストアドプロシージャの実行権限を制限することで、対応するデータへのアクセス権限を制限し、権限のないユーザーによるデータへのアクセスを回避し、データのセキュリティを確保することができます。
MySQL のストアド プロシージャについてストアド プロシージャはデータベース ストレージの重要な機能ですが、MySQL は 5.0 より前のストアド プロシージャをサポートしていなかったので、アプリケーション内の MySQL が大幅に割引されました。 。幸いなことに、MySQL 5.0 はついにストアド プロシージャのサポートを開始しました。これにより、データベースの処理速度が大幅に向上し、データベース プログラミングの柔軟性も向上します。
MySQL ストアド プロシージャの作成(1).形式
MySQL ストアド プロシージャの作成形式:
CREATE PROCEDURE プロセス名 ([ プロセス パラメーター[,...]]) [特性...] プロセス本体例を示します:
mysql> DELIMITER // mysql> CREATE PROCEDURE proc1(OUT s int) -> BEGIN -> SELECT COUNT(*) INTO s FROM user; -> END -> // mysql> DELIMITER ;
注:
ここで必須です。 DELIMITER // と DELIMITER ; の 2 つの文は、MySQL がデフォルトで区切り文字として ";" を使用するため、DELIMITER は区切り文字を意味します。区切り文字を宣言しない場合、コンパイラはストアド プロシージャを SQL ステートメントとして扱います。その後、コンパイル プロセスが実行されます。ストアド プロシージャのコードはエラーを報告するため、MySQL が ";" をストアド プロシージャ内のコードとして扱い、これらのコードを実行しないように、DELIMITER キーワードを使用して現在のセグメント区切り文字を事前に宣言する必要があります。の場合は、区切り文字を削除する必要があります。
ストアド プロシージャには、必要に応じて、入力、出力、入力および出力パラメータが含まれる場合があります。出力パラメータ s があり、型は int です。複数のパラメータがある場合は、「,」を使用して区切ります。
プロセス本体の開始と終了は、BEGIN と END によって識別されます。
(2). 宣言区切り文字
実は、宣言区切り文字については、上記の注釈に非常にわかりやすく書かれていますので、これ以上言う必要はありませんが、注意すべき点が 1 つあります。 MySQL Administrator 管理ツールを使用する場合は、直接作成できるため、宣言する必要はありません。
(3). パラメータ
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
代码示例
header('Content-Type:text/html;charset=UTF-8'); $conn = mysql_connect('localhost','root','123456') or die ("数据连接错误!!!"); mysql_select_db('test',$conn);
实例一:无参的存储过程
$sql = "create procedure myproce() begin INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0'); end; "; $res = mysql_query($sql);//创建一个myproce的存储过程 $sql = "call test.myproce();"; $res = mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录。 var_dump($res);
实例二:传入参数的存储过程
//$sql = "create procedure myproce2(in score int) //begin //if score >= 60 then //select 'pass'; //else //select 'no'; //end if; //end; //"; //mysql_query($sql);//创建一个myproce2的存储过程 //$sql = "call test.myproce2(90);"; //$reslut = mysql_query($sql);//调用myproce2的存储过程,看不到效果,可以在cmd下看到结果。 //$array = mysql_fetch_array($reslut); //var_dump($array);
以上がmysqlストアドプロシージャとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。