ホームページ >データベース >mysql チュートリアル >mysql ストアド プロシージャはどのような用途に使用されますか?
mysql ストアド プロシージャの役割: 1. 使いやすい単位で処理をカプセル化することで複雑な操作を簡素化する; 2. 変更の管理を簡素化する; 3. アプリケーションのパフォーマンスの向上に役立つ; 4、アプリケーション間のトラフィックの削減に役立つアプリケーションとデータベースサーバー、アプリケーションは複数の長い SQL ステートメントを送信する必要がなく、ストアド プロシージャの名前とパラメーターのみを送信する必要があるため、5. SQL ステートメントの機能と柔軟性を強化でき、mysql が複雑な処理を完了できるようになります。判断やより複雑な操作; 6. データベースのセキュリティとデータの完全性などを向上させることができます。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
MySQL 5.0 バージョンは以前はストアド プロシージャをサポートしていなかったので、MySQL のアプリケーションが大幅に減少しました。 MySQL はバージョン 5.0 からストアド プロシージャをサポートしているため、データベースの処理速度が向上するだけでなく、データベース プログラミングの柔軟性も向上します。ストアド プロシージャはデータベースの重要な機能です。ストアド プロシージャデータの変換、データの移行、レポートの作成はプログラミング言語に似ており、正常に実行されると、いつでも呼び出して、指定された機能操作を完了できます。 ストアド プロシージャを使用すると、データベース アクセスの効率が向上するだけでなく、データベース使用のセキュリティも向上します。 呼び出し元にとって、ストアド プロシージャは SQL ステートメントをカプセル化するため、呼び出し元は論理関数の特定の実装プロセスを考慮する必要がありません。簡単な呼び出しだけで、JavaやC#などのプログラミング言語から呼び出すことができます。
ストアド プロシージャの役割 (利点)
ストアド プロシージャは、フロー制御ステートメントを使用して作成できます。これは、強力な柔軟性を備え、複雑な判断やより複雑な操作を完了できます。
ストアド プロシージャのセキュリティを向上させる 1 つの方法は、ストアド プロシージャを中間コンポーネントとして使用することです。プロシージャ、特定のテーブルに対して関連する操作を実行し、ストアド プロシージャを外部プログラムへのインターフェイスとして提供します。これにより、外部プログラムはデータベースのテーブルを直接操作することができず、ストアドプロシージャを通じてのみ対応するテーブルを操作できるため、セキュリティをある程度向上させることができます。
データを独立させると分離の効果が得られます。つまり、プログラムは複数の SQL ステートメントを実行する代わりにストアド プロシージャを呼び出すことができます。この場合、ストアド プロシージャによってデータがユーザーから分離されます。利点は、データ テーブルの構造が変更された場合に、テーブルを呼び出すときにプログラムを変更する必要がないことです。データベース管理者はストアド プロシージャを書き直すだけで済みます。 。
ストアド プロシージャの欠点
ストアド プロシージャの構築により、複雑なビジネス ロジックを使用したストアド プロシージャの開発がより困難になります。
ストアド プロシージャのデバッグが困難になります。ストアド プロシージャをデバッグできるデータベース管理システムはわずかです。残念ながら、MySQL にはストアド プロシージャをデバッグする機能がありません。
ストアド プロシージャの開発と保守は簡単ではありません。ストアド プロシージャの開発と保守には、多くの場合、すべてのアプリケーション開発者が備えているわけではない特殊なスキル セットが必要です。これにより、アプリケーションの開発およびメンテナンスの段階で問題が発生する可能性があります。
-- 创建存储过程 create procedure mypro(in a int,in b int,out sum int) begin set sum = a+b; end;
「関数」でプロセスを表示することもできます。図に示すように、Navicat クライアントのノードにアクセスします。
#ストアド プロシージャを呼び出します。コードは次のとおりです。
call mypro(1,2,@s);-- 调用存储过程 select @s;-- 显示过程输出结果実行結果 ##ストアド プロシージャの構文分析
mypro
はプロセス名を定義するために使用されます; (in a int, in b int, out sum int)
は、プロセスのパラメータ。out
は出力パラメータを表します。 Java でメソッドを定義するときの仮パラメータと戻り値と同様に、
begin
と
call
はプロセスの呼び出しに使用され、
IN入力パラメータ: 呼び出し元がプロセスに値を渡すことを示します (受信値はリテラルまたは変数にすることができます);
OUT
出力パラメータ: プロセスを示します 呼び出し元に値を渡します (複数の値を返すことができます) (送信される値は変数のみです); INOUT
入力パラメータと出力パラメータ: これは、呼び出し元がプロセスに値を渡すことを意味します。また、プロセスが呼び出し元に値を渡すことも意味します (値は変数のみにすることができます)。 ストアド プロシージャはパラメータに応じて 4 つのカテゴリに分類できます:
2). 入力パラメータのみのあるプロシージャ;
3). 出力パラメータのみを持つプロシージャ;
4). 入力パラメータと出力パラメータを含むプロシージャ。
変数#変数定義
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];##declare は変数を宣言するために使用されます。
variable_name
は変数名を表し、
datatype
は MySQL のデータ型を表します。
は、デフォルト値を宣言するために使用されます。
declare name varchar(20) default ‘jack’。
SET 变量名 = 表达式值 [,variable_name = expression ...]ストアド プロシージャで変数を使用します。コードは次のとおりです
use schooldb;-- 使用 schooldb 数据库 -- 创建过程 create procedure mypro1() begin declare name varchar(20); set name = '丘处机'; select * from studentinfo where studentname = name; end; -- 调用过程 call mypro1();実行結果
#フロー制御ステートメント
if 条件ステートメント
、## の結果に基づいてステートメントを実行します。プログラミング言語の #else 構文は似ています。
ストアド プロシージャを定義し、整数を入力し、if ステートメントを使用してそれが正の数か負の数かを判断します。コードは次のとおりです:
-- 创建过程 create procedure mypro2(in num int) begin if num<code>実行結果</code><code></code><code></code><code></code>case 条件文 <p></p><p></p>#case<p> は、<img src="https://img.php.cn/upload/article/000/000/024/fe178bfb1a0eb7dd09df67d79c722d95-4.png" alt="mysql ストアド プロシージャはどのような用途に使用されますか?"> に似た別の条件文です。プログラミング言語 #、</p>when<h4> 構文で ## を選択します。 MySQL の <a id="case__169">case</a> ステートメントには 2 つの構文 <strong> 形式があります。 </strong> </h4>ストアド プロシージャを定義し、整数を入力し、case ステートメントを使用してそれが正の数か負の数かを判断します。コードは次のとおりです: <p></p><pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro3(in num int) begin case -- 条件开始 when num<code>実行結果</code><code></code><code></code>ストアド プロシージャを定義し、整数を入力し、case ステートメントを使用してそれが 1 か 2 かを判断します。コードは次のとおりです。 <code><pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro4(in num int) begin case num -- 条件开始 when 1 then select '数值是 1'; when 2 then select '数值是 2'; else select '不是 1 也不是 2'; end case; -- 条件结束 end; -- 调用过程 call mypro4(3);実行結果
两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。
while
语句的用法和 java
中的 while
循环类似。
定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程 create procedure mypro5(out sum int) begin declare num int default 0; set sum = 0; while num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-7.png" alt="mysql ストアド プロシージャはどのような用途に使用されますか?"></p><h4> <a id="repeat__243"></a><strong>repeat 循环语句</strong> </h4><p><code>repeat</code>语句的用法和 <code>java</code>中的 <code>do…while</code> 语句类似,都是先执行循环操作,再判断条件,区别是 <code>repeat</code>表达<br> 式值为 <code>false</code>时才执行循环操作,直到表达式值为 <code>true</code>停止。</p><p>定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:</p><pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro6(out sum int) begin declare num int default 0; set sum = 0; repeat-- 循环开始 set num = num+1; set sum = sum+num; until num>=10 end repeat; -- 循环结束 end; -- 调用过程 call mypro6(@sum); -- 查询变量值 select @sum;
运行结果
循环语句,用来重复执行某些语句。
执行过程中可使用 leave
语句或 iterate
跳出循环,也可以嵌套 IF
等判断语句。
leave
语句效果相当于 java 中的 break
,用来终止循环;iterate
语句效果相当于 java 中的 continue
,用来结束本次循环操作,进入下一次循环。定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程 create procedure mypro7(out sum int) begin declare num int default 0; set sum = 0; loop_sum:loop-- 循环开始 set num = num+1; set sum = sum+num; if num>=10 then leave loop_sum; end if; end loop loop_sum; -- 循环结束 end; -- 调用过程 call mypro7(@sum); -- 查询变量值 select @sum;
运行结果
代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。
存储过程的管理主要包括:显示过程、显示过程源码、删除过程。
比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:
SHOW PROCEDURE STATUS;
SHOW PROCEDURE status where db = 'schooldb';
SHOW PROCEDURE status where name like '%my%';
SHOW CREATE PROCEDURE mypro1;
drop PROCEDURE mypro1;
【相关推荐:mysql视频教程】
以上がmysql ストアド プロシージャはどのような用途に使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。