ホームページ データベース mysql チュートリアル mysql のストアド プロシージャとストアド関数とは何ですか?

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

Oct 15, 2020 am 11:36 AM
mysql

mysql では、ストアド プロシージャとストアド関数は、データベース内で定義された SQL ステートメントのコレクションです。このうち、ストアド ファンクションは return ステートメントを通じて関数値を返すことができ、主に値を計算して返すために使用されますが、ストアド プロシージャは値を直接返さず、主に操作を実行するために使用されます。

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

(推奨チュートリアル: mysql ビデオ チュートリアル)

mysql のストアド プロシージャ

ストアド プロシージャの作成は簡単ではありませんが、ストアド プロシージャを使用すると、操作が簡素化され、冗長な操作手順が削減され、同時に操作中のエラーが減り、効率が向上します。可能な限りストアド プロシージャの使用方法を学ぶ必要があります。

ここではストアドプロシージャの作成方法を中心に紹介します。

CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成できます。構文形式は次のとおりです:

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
ログイン後にコピー

[プロセス パラメータ[,…]] 形式

[ IN | OUT | INOUT ] <参数名> <类型>
ログイン後にコピー

構文の説明は次のとおりです:

1) プロシージャ名

デフォルトで現在のデータベースに作成されるストアド プロシージャの名前。特定のデータベースにストアド プロシージャを作成する必要がある場合は、名前の前にデータベースの名前 (db_name.sp_name) を付けます。

名前には、MySQL 組み込み関数と同じ名前を選択しないように注意してください。そうしないと、エラーが発生します。

2) プロセス パラメーター

ストアド プロシージャのパラメーター リスト。このうち、 はパラメータ名、 はパラメータのタイプ (任意の有効な MySQL データ タイプにすることができます) です。パラメータが複数ある場合は、パラメータリスト内でパラメータをカンマで区切ります。ストアド プロシージャにはパラメータを含めることはできません (この場合、ストアド プロシージャの名前の後にかっこのペアを追加する必要があります)、または 1 つ以上のパラメータを含めることもできます。

MySQL ストアド プロシージャは、入力パラメータ、出力パラメータ、入出力パラメータという 3 種類のパラメータをサポートしており、それぞれ IN、OUT、INOUT の 3 つのキーワードで識別されます。このうち、入力パラメータはストアド プロシージャに渡すことができ、出力パラメータはストアド プロシージャが演算結果を返す必要がある場合に使用され、入出力パラメータは入力パラメータと出力パラメータの両方として機能します。

パラメータの名前は、データ テーブルの列名と同じであってはいけないことに注意してください。そうでない場合、エラー メッセージは返されませんが、ストアド プロシージャの SQL ステートメントは、パラメータ名を列名として使用すると、エラーが発生します。予測可能な結果。

3) プロシージャ本体

ストアド プロシージャの主要部分 (ストアド プロシージャ本体とも呼ばれます) には、プロシージャの呼び出し時に実行する必要がある SQL ステートメントが含まれています。このセクションはキーワード BEGIN で始まり、キーワード END で終わります。ストアド プロシージャ本体に SQL ステートメントが 1 つだけある場合は、BEGIN-END フラグを省略できます。

ストアド プロシージャの作成では、DELIMITER コマンドという非常に重要な MySQL コマンドが頻繁に使用されます。特にコマンド ラインから MySQL データベースを操作するユーザーは、このコマンドの使い方を習得する必要があります。

MySQL では、サーバーが SQL ステートメントを処理するときに、デフォルトでステートメントの終了マークとしてセミコロンが使用されます。ただし、ストアド プロシージャを作成する場合、ストアド プロシージャの本体には複数の SQL ステートメントが含まれる場合があります。これらの SQL ステートメントがステートメントの終了文字としてセミコロンを使用する場合、MySQL サーバーは処理中に最初に検出された SQL ステートメントで終了します。セミコロンが使用されます。プログラム全体のターミネータとして使用すると、ストアド プロシージャ本体の後続の SQL ステートメントは処理されなくなりますが、これは明らかに不可能です。

上記の問題を解決するには、通常、DELIMITER コマンドを使用して終了コマンドを他の文字に変更します。 構文形式は次のとおりです:

DELIMITER $$
ログイン後にコピー

構文の説明は次のとおりです:

  • $$ はユーザーです-定義されたターミネータ、通常はこれです。 記号には、2 つの「?」または 2 つの「¥」などの特殊な記号を使用できます。

  • DELIMITER コマンドを使用する場合は、バックスラッシュ「\」文字は MySQL エスケープ文字であるため、使用しないでください。

MySQL コマンド ライン クライアントに次の SQL ステートメントを入力します。

mysql > DELIMITER ??
ログイン後にコピー

この SQL ステートメントが正常に実行されると、コマンド、ステートメント、またはプログラムの終了記号は 2 つの疑問符「??」に置き換えられます。

終了記号をデフォルトのセミコロン「;」に戻す場合は、MySQL コマンド ライン クライアントに次のステートメントを入力します:

mysql > DELIMITER ;
ログイン後にコピー

注: DELIMITER とセミコロン「;」それらの間にはスペースが必要です。ストアド プロシージャを作成する場合は、CREATE ROUTINE 権限が必要です。

mysql のストアド関数

MySQL では、CREATE FUNCTION ステートメントを使用してストアド関数を作成します。構文は次のとおりです:

CREATE FUNCTION sp_name ([func_parameter[...]])
RETURNS type
[characteristic ...] routine_body
ログイン後にコピー

その中に:

  • sp_name パラメータ: ストアド関数の名前を表します;

  • func_parameter: ストアド関数のパラメータ リストを表しますストアド関数;

  • RETURNS タイプ: 戻り値のタイプを指定;

  • characteristic パラメータ: ストアド関数の特性を指定します。このパラメータの値はストアド プロシージャの値と同じです。 ;

  • routine_body パラメータ: SQL コードの内容を示します。開始をマークするには BEGIN...END を使用できます。そしてSQLコードの終わり。

注意:在具体创建函数时,函数名不能与已经存在的函数名重名。除了上述要求外,推荐函数名命名(标识符)为 function_xxx 或者 func_xxx。

func_parameter 可以由多个参数组成,其中每个参数由参数名称和参数类型组成,其形式如下:
[IN | OUT | INOUT] param_name type;
ログイン後にコピー

其中:

  • IN 表示输入参数,OUT 表示输出参数,INOUT 表示既可以输入也可以输出;

  • param_name 参数是存储函数的参数名称;

  • type 参数指定存储函数的参数类型,该类型可以是 MySQL 数据库的任意数据类型。

例 1

使用 CREATE FUNCTION 创建查询 tb_student 表中某个学生姓名的函数,SQL 语句和执行过程如下:

mysql> USE test;
Database changed
mysql> DELIMITER //
mysql> CREATE FUNCTION func_student(id INT(11))
    -> RETURNS VARCHAR(20)
    -> COMMENT &#39;查询某个学生的姓名&#39;
    -> BEGIN
    -> RETURN(SELECT name FROM tb_student WHERE tb_student.id = id);
    -> END //
Query OK, 0 rows affected (0.10 sec)
mysql> DELIMITER ;
ログイン後にコピー

上述代码中,创建了 func_student 函数,该函数拥有一个类型为 INT(11) 的参数 id,返回值为 VARCHAR(20) 类型。SELECT 语句从 tb_student 表中查询 id 字段值等于所传入参数 id 值的记录,同时返回该条记录的 name 字段值。

创建函数与创建存储过程一样,需要通过命令 DELIMITER // 将 SQL 语句的结束符由“;”修改为“//”,最后通过命令 DELIMITER ; 将结束符号修改成 SQL 语句中默认的结束符号。

如果在存储函数中的 RETURN 语句返回一个类型不同于函数的 RETURNS 子句中指定类型的值,返回值将被强制为恰当的类型。比如,如果一个函数返回一个 ENUM 或 SET 值,但是 RETURN 语句返回一个整数,对于 SET 成员集的相应的 ENUM 成员,从函数返回的值是字符串。

拓展阅读

由于存储函数和存储过程的查看、修改、删除等操作几乎相同,所以我们不再详细讲解如何操作存储函数了。

查看存储函数的语法如下:

SHOW FUNCTION STATUS LIKE 存储函数名;
SHOW CREATE FUNCTION 存储函数名;
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存储函数名;
ログイン後にコピー

可以发现,操作存储函数和操作存储过程不同的是将 PROCEDURE 替换成了 FUNCTION。同样,修改存储函数的语法如下:

ALTER FUNCTION 存储函数名 [ 特征 ... ]
ログイン後にコピー

存储函数的特征与存储过程的基本一样。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

SQLデータベースの構築方法 SQLデータベースの構築方法 Apr 09, 2025 pm 04:24 PM

SQLデータベースの構築には、DBMSの選択が必要です。 DBMSのインストール。データベースの作成。テーブルの作成;データの挿入;データの取得。データの更新。データの削除。ユーザーの管理。データベースのバックアップ。

See all articles