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 ページの先頭に戻るいくつかの実装の概要

推薦する

Docker で Node プロジェクトをビルドしてデプロイする方法

目次DockerとはクライアントサイドDocker基本的なDocker操作画像名画像をプルするその他...

Docker Swarmの概念と使用法の詳細な説明

Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。...

vue.js ルーターのネストされたルートの実例

目次序文Vue CLI での設定基本コードVueルーターの登場ネストされたルートの設定要約する序文V...

CentOS7 環境での DHCP 設定チュートリアル

目次CentOS7環境での設定コマンド手順1. DHCP設定ファイルを設定する2. グローバル構成を...

Vue は PC カメラを呼び出してリアルタイムで写真を撮る機能を実装します

VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...

Oracle10パーティションとMySQLパーティションの違いの詳細な説明

一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...

MySQL Routerのインストールと展開

目次01 MySQLルーターの紹介MySQL Router とは何ですか? 02 MySQLルータの...

Dockerの高可用性構成の詳細な説明

Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...

WeChat アプレット wxs 日付と時刻処理の実装例

目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...

Node.js のフロントエンドとバックエンドのインタラクションによるユーザーログインの実装の実践

目次1. プロジェクト要件次にコーディングを始める1. フロントエンドページを作成する(CSSスタイ...

Angular環境構築と簡単な体験のまとめ

Angular入門Angular は、Google が開発したオープンソースの Web フロントエン...

Dockerコンテナイメージからコードを復元する手順

コードが失われ、コンテナ内で実行されているイメージから必要なコードを回復する必要がある場合があります...

ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...

MySQL の 3 つの浮動小数点型 (float、double、decimal) の違いと概要について簡単に説明します。

各浮動小数点型のストレージ サイズと範囲は、次の表に示されています。タイプサイズ範囲(符号付き)範囲...

iptables の再起動後に Docker の iptables ルールの完全なプロセスが失われる

原因と結果1. ansibleコマンドを使用してジャンプサーバー上のマシンBをテストすると、次のエラ...