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+daocloudはフロントエンドプロジェクトの自動構築とデプロイを実現します

自動プロジェクト展開は大企業やユニコーン企業でよく使用され、手動でプロジェクトを展開するよりも効率的...

iframe なしの div ネスト HTML

最近、宿題をしているときに、iframe を使用せずにページをネストする必要があったため、jquer...

MySQLにおける分散ロックの考え方をDBの助けを借りて詳しく説明します

序文スタンドアロン ロックであっても分散ロックであっても、共有データに基づいて現在の操作の動作を判断...

MySQLインデックスの基礎となるデータ構造の詳細

目次1. インデックスの種類1. B+ツリー2. MyISAM と InnoDB の B+ ツリー ...

MySQL データベース内の varchar 型の数値のサイズを比較する方法

テストテーブルを作成する -- ---------------------------- -- ch...

CSS変換ページめくりアニメーションレコードの実装

ページめくりの問題のシナリオBとCは同じページ(表と裏)にありますページをめくって A をカバーした...

MySQL 5.7.9 シャットダウン構文例の詳細な説明

mysql-5.7.9 では、ついにシャットダウン構文が提供されます。以前は、MySQL データベー...

Linux は、Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決します

Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決す...

XHTMLコードの一般的なアプリケーション問題をまとめる

時間が経つにつれて、多くの人が XHTML の使い方を知らないことに気づきました。普通の初心者だけで...

FileZilla を使用して FTP サーバーに接続するプロセスの図

最初にサーバー上に FTP サーバーをセットアップし始めたとき、接続できないことがわかったので、Fi...

SQLで同じフィールドの異なる値のデータ統計を実行する

適用シナリオ: シールのさまざまな状態に応じて、さまざまな状態のシールの数をカウントする必要がありま...

Doubanウェブサイトのウェブサイトコンテンツに小さな変更を加える方法

<br />読みやすさはウェブサイトにとって非常に重要な部分であり、ウェブサイトの核心と...

VSCode+CMake+Clang+GCC 環境構築チュートリアル (Win10 の場合)

大学院入試に備えて、C/C++ を使って基本的なデータ構造とアルゴリズムを実装する予定です。アルゴリ...

Ubuntu16.04はphp5.6ウェブサーバー環境を構築します

Ubuntu 16.04 はデフォルトで PHP7.0 環境をインストールしますが、PHP7 は一部...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...