序文 この記事では主にMySQLのカスタム関数とストアドプロシージャに関する関連コンテンツを紹介し、皆さんの参考と学習のために共有します。詳しい紹介を見てみましょう。 1. 前提条件 MySQL データベースには user_info テーブルがあり、その構造とデータは次のとおりです。 mysql> desc user_info; +-----------+----------+------+------+-------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +-----------+----------+------+------+-------+-------+ | id | int(10) | NO | PRI | NULL | | | 名前 | char(20) | NO | | NULL | | | パスワード | char(40) | NO | | NULL | | | 電子メール | char(20) | NO | | NULL | | | 電話 | char(20) | NO | | NULL | | | 役割 | char(10) | NO | | NULL | | | 性別 | char(10) | NO | | NULL | | | ステータス | int(10) | NO | | NULL | | | createAt | 日時 | NO | | NULL | | | exprAt | 日時 | NO | | NULL | | | 有効日数 | int(10) | NO | | NULL | | | delAt | 日時 | YES | | NULL | | +-----------+----------+------+------+-------+-------+ 12 行セット (0.10 秒) mysql> user_info から * を選択します。 +----+--------------+-----------+-------------+------------+----------+---------+----------------------+----------------------+--------+-------+ | id | 名前 | パスワード | 電子メール | 電話 | 役割 | 性別 | ステータス | 作成日時 | 有効期限 | 有効期限 | +----+--------------+-----------+-------------+------------+----------+---------+----------------------+----------------------+--------+-------+ | 1 | StephenWang7 | py123456 | [email protected] | 15103887470 | 管理者 | 男性 | 200 | 2019-04-12 20:11:30 | 2019-04-19 20:11:30 | 30 | NULL | | 2 | StephenWang8 | 123456 | [email protected] | 15103887470 | 視聴者 | 男性 | 200 | 2019-04-12 20:11:30 | 2019-04-19 20:11:30 | 30 | NULL | +----+--------------+-----------+-------------+------------+----------+---------+----------------------+----------------------+--------+-------+ セット内の 2 行 (0.00 秒) 2. カスタム関数 関数: 特定の機能を実行できる SQL ステートメントのセット。 MySQL は、特定のビジネス機能を完了するためのカスタム関数をサポートしています。 ユーザー定義関数 (UDF) を作成するための構文は次のとおりです。
UDF を呼び出すための構文は次のとおりです。
パラメータなしのUDFの作成 例1: user_infoテーブル内のレコード数を照会する #関数の定義 mysql> create function user_info_count() -> int(10) を返します -> 戻る -> (user_info から count(*) を選択); user_info_count()関数を呼び出す mysql> user_info_count() を選択します。 +-------------------+ | ユーザー情報カウント() | +-------------------+ | 2 | +-------------------+ セット内の 1 行 (0.00 秒) パラメータ付きUDFの作成 例 2: ID に基づいてユーザー名を照会します。 #関数の定義 mysql> create function queryNameById(uid int(10)) -> char(20) を返します -> 戻る -> (id=uid の場合、user_info から名前を選択); クエリは正常、影響を受けた行は 0 行 (0.01 秒) ID 1 のユーザー名を照会する関数を呼び出します。 mysql> queryNameById(1) を選択します。 +------------------+ | クエリ名ID(1) | +------------------+ 翻訳: +------------------+ セット内の 1 行 (0.00 秒) UDFを表示 システム内のすべてのUDFをクエリする 関数のステータスを表示します。 指定されたUDFをクエリする # 作成関数を表示する関数名; mysql> 関数 queryNameById を表示します。 エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'queryNameById' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 mysql> 関数 queryNameById() を表示します。 エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'queryNameById()' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 mysql> 作成関数 queryNameById() を表示します。 エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の '()' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 mysql> show create function queryNameById; +--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+----------------------+ | 関数 | sql_mode | 関数の作成 | character_set_client | collation_connection | データベース照合 | +--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+----------------------+ | queryNameById | ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `queryNameById`(uid int(10)) RETURNS char(20) CHARSET latin1 戻り値 (id=uid の場合、user_info から名前を選択) | utf8 | utf8_general_ci | latin1_swedish_ci | +--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+----------------------+ セット内の1行(0.00秒) UDFの変更 関数の内容を変更する場合は、関数を削除してから再作成してください。 UDF の削除 UDF を削除するための構文は次のとおりです。
例 3: queryNameId 関数を削除し、再度呼び出して現象を観察します。 mysql> 関数 queryNameById を削除します。 クエリは正常、影響を受けた行は 0 行 (0.45 秒) mysql> queryNameById(1) を選択します。 エラー 1305 (42000): FUNCTION rms.queryNameById が存在しません マイSQL> 3. ストアドプロシージャ ストアド関数はカスタム関数に似ており、特定の機能を実行する SQL ステートメントのセットでもあります。複雑なSQLや頻繁に呼び出されるSQLを事前に記述し、名前を付けます。使いたいときに呼び出すだけ。 ストアド プロシージャを定義するための構文は次のとおりです。
パラメータなしのストアドプロシージャの作成 例 4: ユーザー名を照会します。 mysql> 区切り文字 // mysql> プロシージャ queryName() を作成します -> 開始 -> user_info から名前を選択します。 -> 終了 // DELIMITER コマンドに関しては、MySQL コマンドを終了する文字を変更します。デフォルトの終了コマンド文字はセミコロンです。ストアド プロシージャに複数のステートメントが含まれている場合、最初のセミコロンはストアド プロシージャの終了の記号として使用されます。これは予想どおりではないため、デフォルトのコマンド終了文字を変更する必要があります。 DELIMITER // は終了コマンド文字を // に変更します。ストアド プロシージャを呼び出すコマンドは、call stored procedure name です。 #この時点でのコマンドの終了記号は // ではありません; mysql> queryName() を呼び出す // +--------------+ | 名前 | +--------------+ 翻訳: 翻訳: +--------------+ セット内の 2 行 (0.00 秒) クエリは正常、影響を受けた行は 0 行 (0.00 秒) パラメータ付きのストアドプロシージャの作成 例 5: ID に基づいて名前をクエリします。 mysql> プロシージャ queryNameById を作成する -> (uid int(15)内) -> 開始 -> user_info から id=uid となる名前を選択します。 -> 終了 -> // クエリは正常、影響を受けた行は 0 行 (0.03 秒) ストアドプロシージャqueryNameByIdを呼び出す mysql> queryNameById(1); を呼び出します。 -> // +--------------+ | 名前 | +--------------+ 翻訳: +--------------+ セット内の1行(0.03秒) クエリは正常、影響を受けた行は 0 行 (0.04 秒) ストアドプロシージャを変更する ストアド プロシージャの内容を作成する場合は、ストアド プロシージャを削除してから再作成することができます。 ストアドプロシージャを表示する show create procedure <プロシージャ名> mysql> show create procedure queryNameById; -> // +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | queryNameById | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `queryNameById`(In uid int(15)) begin select name from user_info where id=uid; end | utf8 | utf8_general_ci | latin1_swedish_ci | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 1 row in set (0.04 sec) ストアドプロシージャの削除
ストアドプロシージャqueryNameByIdを削除します mysql> プロシージャ queryNameById を削除します // クエリは正常、影響を受けた行は 0 行 (0.02 秒) mysql> queryNameById(1) を呼び出す // エラー 1305 (42000): PROCEDURE rms.queryNameById が存在しません 4. まとめ カスタム関数とストアド プロシージャはどちらも特定の機能を実行する SQL セットですが、それらの違いは何でしょうか。 a. 異なる呼び出し方法
b. カスタム関数には出力パラメータを設定できませんが、ストアド プロシージャには設定できます。 c. カスタム関数には return ステートメントが含まれている必要がありますが、ストアド プロシージャには必要ありません。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: vue.jsは画像のURLに従って画像をダウンロードします
>>: Centos8 で yum を使用して rabbitmq をインストールするチュートリアル
表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...
デフォルトでは、MySQL は日付に 0 値を挿入することを受け入れますが、実際には日付の 0 値に...
今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...
序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...
今日、リモートデスクトップを実行してログインしているときにこのプロンプトを見つけました「MySQL ...
DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...
仕事上、携帯電話に適応した Web ページ効果を作成する必要があります。ようやく完成しました。まずは...
ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...
開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...
VMware Tools は VMware 仮想マシンに付属するツールで、VirtualBox (...
検索ページ: search.wxml ページ: <view class="form&...
目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...
この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...
MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...
以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...