mysql ストアド プロシージャとストアド関数の違いは何ですか?

青灯夜游
リリース: 2022-02-17 15:22:59
オリジナル
16612 人が閲覧しました

違い: 1. ストアド関数には多くの制限がある一方、ストアド プロシージャには比較的制限が少ない; 2. ストアド関数は呼び出し元に 1 つの結果値のみを返すのに対し、ストアド プロシージャは 1 つまたは複数の結果セットを返す; 3. ストアド プロシージャには 3 つのパラメータ タイプがあり、ストアド ファンクションには 1 つのパラメータ タイプのみがあります。

mysql ストアド プロシージャとストアド関数の違いは何ですか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

ストアド プロシージャとは何ですか?

ストアド プロシージャは、特定の機能を完了するために使用される、大規模なデータベース システム内の一連の SQL ステートメントです。これらはデータベースに保存されます。初めてコンパイルされた後は、ユーザーは、ストアド プロシージャの名前とパラメーター (ストアド プロシージャにパラメーターがある場合) を指定して、ストアド プロシージャを実行します。ストアド プロシージャはデータベース内の重要なオブジェクトであり、適切に設計されたデータベース アプリケーションではストアド プロシージャを使用する必要があります。

メリット:
(1) 再利用: ストアドプロシージャを再利用できるため、開発者の負担を軽減できます。
(2) 効率の向上:ストアドプロシージャは初回使用時にコンパイルされるため、一度コンパイルすると再度コンパイルする必要がなく、効率が向上します。
(3) ネットワーク トラフィックの削減: ストアド プロシージャはサーバー上に配置されているため、呼び出し時にストアド プロシージャの名前とパラメータを渡すだけで済み、ネットワーク上で送信されるデータ量が削減されます。
(4) セキュリティ: パラメーター化されたストアド プロシージャは SQL インジェクションを防止でき、ストアド プロシージャにアクセス許可の付与、拒否、取り消しを適用できます。

短所:
(1) デバッグの際のトラブル
(2) 移植性の悪さ
(3) 保守性の悪さ

コード:

CREATE DEFINER=`root`@`%` PROCEDURE `getName`(IN `uid` int,OUT my_uname VARCHAR(255))
BEGIN
	#Routine body goes here...
select admin_name into my_uname from admin_user where id=uid;
  select my_uname;
END
ログイン後にコピー

ストアドファンクションとは何ですか?

ストアド関数は、関数名、パラメータを備えた一連のストアド プロシージャであり、結果セットを返します。ストアド関数はストアド プロシージャと構造が似ていますが、結果を返すには return 句が必要です。

コード:

CREATE DEFINER=`root`@`%` FUNCTION `queryChildrenAreaInfo`(areaId INT) RETURNS varchar(4000) CHARSET utf8
BEGIN
	DECLARE sTemp VARCHAR(4000);
	DECLARE sTempChd VARCHAR(4000);
	
	SET sTemp='$';
	SET sTempChd = CAST(areaId AS CHAR);
	
	WHILE sTempChd IS NOT NULL DO
	SET sTemp= CONCAT(sTemp,',',sTempChd);
	SELECT GROUP_CONCAT(id) INTO sTempChd FROM personal_dept WHERE FIND_IN_SET(dept_parentId,sTempChd)>0;
	END WHILE;
	RETURN sTemp;
END
ログイン後にコピー

ストアド プロシージャとストアド関数の違い

1. 概要

ストアド プロシージャとストアド ファンクションを総称してストアド ルーチンと呼びます。 2 つの構文は非常に似ていますが、内容は異なります。

ストレージ関数には、一時テーブルが使用できない、テーブル変数のみ使用できるなど、多くの制限があります。また一部ご利用いただけない機能等もございます。

ストアド プロシージャに対する制限は比較的少なく、実装される関数はより複雑です。

2. 戻り値の違い

ストアド関数は、呼び出し元に 1 つだけの結果値を返します。

ストアド プロシージャは 1 つ以上の結果セットを返します (関数ではこれを行うことはできません)。あるいは、結果を返さずに何らかの効果やアクションを達成するためにのみ使用します。

3. さまざまな呼び出し方法
ストアド関数は SQL に埋め込まれており、cos()、sin( などの組み込み関数と同様に、select で呼び出すことができます。 )。

4. パラメータの違い

ストアドファンクションのパラメータタイプは IN パラメータに似ています

ストアドプロシージャには 3 つのパラメータタイプがあります: INパラメータ、OUT パラメータ、INOUT パラメータ

in: データは内部使用 (値の転送) のためにのみ外部から渡されます。数値または変数

out:プロセスの内部使用にのみ許可されます (使用されません) 外部データ)、外部使用 (参照転送: 外部データは内部に入る前に最初にクリアされます)、変数

inout: 外部でのみ使用できます内部で使用することも、内部で変更することもできます。外部で使用する場合、一般的な参照転送は変数のみを渡すことができます。


ストアド プロシージャは、ユーザー定義の SQL ステートメントのコレクションです。ユーザーはストアド プロシージャを呼び出して、特定のテーブルやその他のオブジェクトのタスクを設計できます。

関数は通常、データベースによって定義されたメソッドであり、パラメータを受け取り、特定のタイプの値を返します。特定のユーザー テーブルは必要ありません。

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysql ストアド プロシージャとストアド関数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート