MySQL ストアド関数の詳細な紹介

MySQL ストアド関数の詳細な紹介

1. ストアド関数を作成する

構文形式:

CREATE FUNCTION 関数名 (パラメータ名 パラメータタイプ、...) 
戻り値 戻り値の型 BEGIN
	関数本体#関数本体にはRETURN文ENDを含める必要があります

例:

パラメータリスト:

FUNCTIONは常に默認為IN參數

RETURNSの後のステートメントは、関数によって返されるデータのタイプを示します。

RETURNS 句は FUNCTION に対してのみ指定でき、関数に対しては強制です。これは関数の戻り値の型を指定するために使用され、関数本体にはRETURN valueステートメントが含まれている必要があります。

関数本体ではBEGIN…ENDを使用して SQL コードの開始と終了を示すこともできます。

関数本体にステートメントが 1 つだけ含まれている場合は、可以省略BEGIN…END

2. ストアド関数の呼び出し

MySQL では、ストアド関数の使用方法は MySQL 内部関数と同じです。つまり、ユーザー定義のストアド関数は、MySQL 内部関数と同じ性質を持ちます。違いは、ストアド関数は用戶自己定義のに対し、内部関数は開發者定義です。

SELECT関数名(引数リスト)

3. 保存された関数を削除する

文法構造:

DROP FUNCTION [IF EXISTS] ストアドファンクション名

4. ストアドプロシージャを表示する

1. SHOW CREATEステートメントを使用して、ストアドプロシージャと関数の作成情報を表示します。

文法構造:

SHOW CREATE FUNCTION ストアドファンクション名

2. SHOW STATUSステートメントを使用して、ストアドファンクションのステータス情報を表示します。

文法構造:

関数ステータスを表示 [LIKE 'pattern']

このステートメントは、データベース、名前、タイプ、作成者、作成日、変更日などのサブルーチンの特性を返します。

[LIKE 'pattern']保存された関数の名前と一致しますが、省略できます。省略した場合、MySQL データベースに格納されているすべての関数に関する情報が一覧表示されます。

例:

#名前がselectmysql>で始まるストアド関数をクエリする SHOW FUNCTION STATUS LIKE 'SELECT%';
************************** 1. 行 ****************************
                  データベース: test_db
                名前: SelectAllData
                タイプ: FUNCTION 
             定義者: root@localhost
            更新日: 2021-10-16 15:55:07
             作成日: 2021-10-16 15:55:07
       セキュリティタイプ: DEFINER
             コメント: 
文字セットクライアント: utf8mb4
照合接続: utf8mb4_general_ci
  データベース照合: utf8mb4_general_ci

3. information_schema.Routinesテーブルからストアドファンクションの情報を表示する

MySQL のストアド関数の情報は、information_schema データベースの Routines テーブルに保存されます。このテーブルのレコードを照会することで、ストアド関数の情報を照会できます。

文法構造:

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME = 'ストアド関数名' [AND ROUTINE_TYPE = 'FUNCTION '];

注: MySQL データベースに存在存儲過程和函數名稱相同的情況場合は、クエリがストアド プロシージャ用か関数用かを示すために、 ROUTINE_TYPEクエリ条件を指定するのが最適です。

5. ストレージ機能を変更する

ストレージ関数を変更しても関数の機能には影響せず、関連する機能のみが変更されます。これは ALTER ステートメントを使用して行われます。

ALTER FUNCTION ストアド関数名;

6. ストアド関数とストアドプロシージャの比較

キーワード呼び出し構文戻り値アプリケーションシナリオ
ストアドプロシージャ手順ストアドプロシージャを呼び出す() 0以上と理解される一般的にアップデートに使用されます
ストアド関数関数SELECT関数() 1つだけ一般的には、クエリ結果が値であり、返される場合に使用されます。

さらに、ストアド関数はクエリ ステートメントで使用できますが、ストアド プロシージャは使用できません。逆に、ストアド プロシージャはより強力で、ストアド関数では利用できないテーブル操作 (テーブルの作成、テーブルの削除など) やトランザクション操作を実行する機能があります。

7. エクササイズを強化する

#前提条件 CREATE TABLE employees
として
atguigudb.`employees` から * を選択します。 

テーブルの作成 
部門 AS
atguigudb.`departments` から * を選択します。 
#1. 会社の従業員数を返す関数 get_count() を作成します。# パラメーターと戻り値 SET GLOBAL log_bin_trust_function_creators = 1;

区切り文字 $
関数 get_count() を作成する
戻り値 INT
始める
	RETURN (SELECT COUNT(*) FROM employees);
終了 $
区切り文字 ;

知らせ:

ストアドyou might want to use the less safe log_bin_trust_function_creators variable 。その後、メモを確認したところ、この問題を解決する 1 つの方法は、SQL ステートメントSET GLOBAL log_bin_trust_function_creators = 1;を実行することであることがわかりました。

#2. 従業員の ID に応じて給与を返す関数 ename_salary() を作成します。# テーブル構造をクエリして、返されるデータのタイプを確認します。DESC employees;

区切り文字 $
関数 ename_salary(id INT) を作成します。
DOUBLE(8,2)を返します
始める
	戻り値 (SELECT salary FROM employees WHERE employee_id = id);
終了 $
区切り文字 ;

#クエリ結果 SELECT ename_salary(100);

最後に愛を:学ぶべきこと:1. ストアド関数を作成するための基本構文を使用する。2. ストアド関数の呼び出し方を学ぶ。3. ストアド関数とストアドプロシージャの類似点と相違点を知る

MySQL ストアドファンクションの詳細な紹介に関するこの記事はこれで終わりです。より関連性の高い MySQL ストアドファンクションのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLのストアドプロシージャと関数を徹底的に理解する
  • MySQL ストアドファンクションとストアドプロシージャの違いの分析
  • MYSQLデータベースでよく使われる関数の紹介
  • MySQLバッチは関数ストアドプロシージャを通じてデータを挿入します
  • MySQL でのストアド プロシージャと関数の作成の詳細な説明
  • MySQL よく使われる関数の詳細な概要
  • MySQL関数の包括的な概要
  • MYSQL関数の使い方

<<:  Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

>>:  HTML ページの先頭に戻るいくつかの実装の概要

推薦する

Linux で at および cron スケジュールタスクをカスタマイズする方法

Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...

MySQLの左結合と内部結合について簡単に説明します

序文最近、X 省のコールド チェーン トレーサビリティ システムの開発で忙しくしています。毎日午後 ...

Docker で Confluence をデプロイするための完全な手順

Confluence は有料ですが、クラックして使用できます (購入が推奨され、正規版がサポートされ...

MySQL のソート関数 field() の詳細な例

序文私たちの日常の開発プロセスでは、ソートが頻繁に使用され、そのような要求がある場合もあります。たと...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

Reactは二次連結(左右連結)を実現する

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...

Element-ui レイアウト (行と列コンポーネント) の実装

目次基本的な手順と使用方法行コンポーネントの分析レンダリング機能ソースコード分析Col成分の分析コン...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

自動ウェブページ更新と自動ジャンプのサンプルコード

ウェブページの自動更新: <head></head> の間に次のコードを追加...

小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明

序文この記事を始める前に、複数選択の質問をしてみましょう。フロントエンド開発でビルド ツールを使用す...

HTML テキストフォーマットの簡単な例 (詳細な説明)

1. テキストの書式設定: この例では、HTML ファイル内のテキストを書式設定する方法を示します...

安全な構成のためにDockerでTLSを有効にする手順

序文以前、Docker の 2375 Remote API を有効にしていました。会社のセキュリティ...

HTML doctype の役割の紹介

ドキュメント モードには次の 2 つの機能があります。 1. HTML文書を解析するためにどのHTM...

MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明

目次導入効果原理形状練習するこの記事では、例を使用して、MySQL マスター/スレーブ レプリケーシ...