DECLARE var_name[,...] type [DEFAULT value]
MySQL ストアド プロシージャと関数を作成する方法
1.0 ストアド プロシージャと関数の作成
ストアド プロシージャと関数の作成とは、頻繁に使用される一連の SQL ステートメントを結合し、これらの SQL ステートメント全体を MySQL サーバーに格納することです
1ストアド プロシージャを作成します
CREATE PROCEDURE procedure_name ([proc_param[,...]]) [characteristic ...] routine_body
procedure_name は作成するストアド プロシージャの名前を表します
proc_param はストアド プロシージャのパラメータを表します
characteristic はストアド プロシージャの特性を表します
routine_body はストアド プロシージャの SQL ステートメントを表します
[ IN | OUT | INOUT ] param_name type
- LANGUAGE SQL: を示します。ストアド プロシージャが使用されている SQL 言語で書かれている
- [NOT] DETERMINISTIC: ストアド プロシージャの実行結果が正しいかどうかを示します。 DETERMINISTIC は、結果が確実であること、つまりすべての結果が正しいことを示しますストアド プロシージャが実行されると、同じ入力は同じ結果を取得します。出力は NOT DETERMINISTIC で、結果が不確実であることを意味します。同じ入力が異なる出力を取得する場合があります。デフォルトは NOT DETERMINISTIC です。
- {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}: サブプログラムによる SQL ステートメントの使用の制限を示します。CONTAINS SQL は、サブプログラムにデータの読み取りまたは書き込みを行うステートメントが含まれていないことを示します。NO SQL READS SQL DATA はサブプログラムにデータを読み取るステートメントが含まれるが、データを書き込むステートメントは含まれないことを示し、MODIFIES SQL DATA はサブルーチンにデータを書き込むステートメントが含まれていることを示します
- SQL SECURITY {DEFINER | INVOKER}: 実行権限を持つユーザーを示します。DEFINER は定義者のみが実行できることを意味します。INVOKER は権限を持つ呼び出し元が実行できることを意味します。デフォルトは DEFINER です。
- COMMENT 'string': ストアド プロシージャまたは関数の説明に使用できるコメント情報
DELIMITER $$ CREATE PROCEDURE proc_employee() COMMENT '查询员工薪水' BEGIN SELECT salary FROM t_employee END; $$ DELIMITER ;
#CREATE FUNCTION fun_name([func_param,[,...]])
[characteristic ...] routine_body
ログイン後にコピー
CREATE FUNCTION fun_name([func_param,[,...]]) [characteristic ...] routine_body
- fun_name を作成します関数名を表します
- func_param 関数のパラメータを表します
- characteristic は関数の特性を表し、値は関数のパラメータと同じですストアド プロシージャ 値は同じです
- routine_body は関数の SQL ステートメントを表します
param_type type引き続き前の例
DELIMITER $$ CREATE FUNCTION func_employee(id INT(4)) RETURNS INT(6) COMMENT '查询员工薪水' BEGIN SELECT salary FROM t_employee END; $$ DELIMITER ;
DECLARE var_name[,...] type [DEFAULT value]
ログイン後にコピー
DECLARE var_name[,...] type [DEFAULT value]
- キーワードDECLARE は変数を宣言するために使用されます
- パラメータ var_name は変数の名前です。複数の変数を同時に定義できます
- #パラメータ タイプは、変数のタイプを指定するために使用されます
- DEFAULT value 句は、変数のデフォルト値を value に設定します。DEFAULT 句が使用されない場合、デフォルト値は NULL です。 #例: 変数 sql_test を定義し、データ型は INT、デフォルト値は 10
DECLARE test_sql INT DEFAULT 10;
2 です。変数の割り当て
SET var_name=expr[,var_name=expr]...
- キーワード SET は変数に値を割り当てるために使用されます
- パラメータ var_name は変数です名前
- パラメータ expr は代入式です。
- 例: 変数 sql_test を 30
SET test_sql = 30;
3|0 に代入します。 定義 条件とハンドラ
条件とハンドラの定義プログラムの実行中に発生する可能性のある問題を事前に定義し、これらの問題を解決する機能をハンドラ
##1 で定義できます。条件を定義しますDECLARE condition_name CONDITION FOR condition_value condition_value: SQLSTATE[VALUE] sqlstate_value|mysql_error_code
- パラメータcondition_value は条件タイプを表します
- パラメータ sqlstate_value およびパラメータ mysql_error_code は MySQL エラーを表すことができます
- 例: can_not_find という名前の ERROR 1146 (42S02) エラーを定義します。これは 2 つの異なる方法で定義できます
// 方法一:使用sqlstate_value DECLARE can_not_find CONDITION FOR SQLSTATE '42S02'; // 方法二:使用mysql_error_code DECLARE can_not_find CONDITION FOR 1146;
DECLARE handler_type HANDLER FOR condition_value[,...] proc_statement handler_type: CONTINUE|EXIT|UNDO condition_value: SQLSTATE[VALUE]sqlstate_value|condition_name|SQLWARNING|NOT FOUND|SQLEXCEPTION|mysql_error_code
- ##CONTINUE: エラーが発生した場合、処理されないことを意味します。
EXIT: エラーが発生するとすぐに終了することを示します
UNDO: エラーが発生した後に中止することを示します 前の操作
- condition_value はエラー タイプを表し、次の値を指定できます:
- #SQLSTATE[VALUE]sqlstate_value には A 5 が含まれます。 -文字列エラー値
condition_nameはDECLARE CONDITION
で定義されたエラー条件名を表します。SQLWARNING 匹配所有 01 开头的 SQLSTATE 错误代码
NOT FOUND 匹配所有 02 开头的 SQLSTATE 错误代码
SQLEXCEPTION 匹配所有没有被 SQLWARNING 或 NOT FOUND 捕获的 SQLSTATE 错误代码
mysql_error_code 匹配数值类型错误代码
proc_statement 匹配数值类型错误代码
下面是定义处理程序的几种示例方式:
// 方法一:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='NOT FOUND'; // 方法二:使用mysql_error_code DECLARE CONTINUE HANDLER FOR 1146 SET @info='NOT FOUND'; // 方法三:先定义条件,然后调用 ECLARE can_not_find CONDITION FOR 1146; DECLARE CONTINUE HANDLER FOR can_not_find SET @info='NOT FOUND'; // 方法四:使用SQLWARNING DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR'; // 方法五:使用NOT FOUND DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NOT FOUND'; // 方法六:使用SQLEXCEPTION DECLARE EXIT HANDLER FOR 使用SQLEXCEPTION SET @info='ERROR';
4|0光标
在存储过程和函数中,可以使用光标逐条读取查询结果集中可能出现的多条记录。光标必须声明在处理程序之前,声明在变量和条件之后
1. 声明光标
DECLARE cursor_name CURSOR FOR select_statement;
参数 cursor_name 表示光标名称
参数 select_statement 表示 SELECT 语句
下面声明一个名为 cur_employee 的光标
DECLARE cur_employee CURSOR FOR SELECT name,age FROM t_employee;
2. 打开光标
OPEN cursor_name;
参数 cursor_name 表示光标的名称
下面打开一个名为 cur_employee 的光标
OPEN cur_employee;
3. 使用光标
FETCH cursor_name INTO var_name[,var_name...]
cursor_name 表示光标的名称
var_name 表示将光标中的 SELECT 语句查询出来的信息存入该参数,该参数必须在声明光标之前就定义好
下面打开一个名为 cur_employee 的光标,将查询的数据存入 emp_name 和 emp_age 这两个变量中
FETCH cur_employee INTO emp_name,emp_age;
4. 关闭光标
CLOSE cursor_name
cursor_name 表示光标的名称
5|0流程控制
1. IF 语句
IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list]... [ELSE statement_list] END IF
参数 search_condition 表示条件判断语句
参数 statement_list 表示不同条件的执行语句
下面是一个 IF 语句的示例
IF age>20 THEN SET @count1=@conut1+1; ELSEIF age=20 THEN @count2=@conut2+1; ELSE @count3=@count3+1; END IF;
2. CASE 语句
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list]... [ELSE statement_list] END CASE
参数 case_value 表示条件判断的变量
参数 when_value 表示变量的取值
参数 statement_list 表示不同 when_value 的执行语句
下面的是一个 CASE 语句的示例
CASE age WHEN 20 THEN SET @count1=@count1+1; ELSE SET @count2=@count2+1; END CASE;
3. LOOP 语句
[begin_label:]LOOP statement_list END LOOP [end_label]
参数 begin_label 和参数 end_label 分别表示循环开始和结束的标志,必须相同,而且都可以省略
参数 statement_list 表示需要循环执行的语句
下面是一个 LOOP 语句的示例
add_num:LOOP SELECT @count1=@count1+1; END LOOP add_num
4. LEAVE 语句
主要用于跳出循环
LEAVE label
参数 label 表示循环的标志
下面是一个 LEAVE 语句的示例
add_num:LOOP SELECT @count1=@count1+1; IF @count1=100 THEN LEAVE add_num; END LOOP add_num
5. ITERATE 语句
也是用于跳出循环,不过是跳出本次循环,直接进入下次循环,类似 Java 的 continue
ITERATE label
ITERATE label
参数 label 表示循环的标志
下面是一个 ITERATE 语句的示例
add_num:LOOP SELECT @count1=@count1+1; IF @count1=100 THEN LEAVE add_num; ELSE IF MOD(@count1,3)=0 THEN ITERATE add_num; SELECT * FROM employee; END LOOP add_num
6. REPEAT 语句
REPEAT 语句是由条件的控制循环语句,当满足特定条件就会退出循环语句
[begin_label:]REPEAT statement_list UNTIL search_condition END REPEAT [end_label]
参数 statement_list 表示需要循环执行的语句
参数 search_condition 表示结束循环的条件,满足该条件即结束循环
下面是一个 REPEAT 语句的示例
add_num:REPEAT SELECT @count1=@count1+1; UNTIL @count1=100 END REPEAT add_num
7. WHILE 语句
WHILE 语句也是有条件控制的循环语句,与 REPEAT 语句不同的是,WHILE 语句是当满足条件时执行循环内的语句
[begin_label:]WHILE search_condition DO statement_list END WHILE [end_label]
参数 statement_list 表示需要循环执行的语句
参数 search_condition 表示结束循环的条件,满足该条件即结束循环
下面是一个 WHILE 语句的示例
WHILE @count<100 DO SET @count=@count+1; END WHILE;
6|0操作存储过程和函数
1. 调用存储过程
在 MySQL 中,使用 CALL 语句来调用存储过程
CALL proc_name([parameter[,...]])
proc_name 是存储过程的名称
paramter 是指存储过程的参数
2. 调用存储函数
在 MySQL 中,存储函数的使用方法和 MySQL 内部函数是一样的
3. 使用 SHOW STATUS 语句查看存储过程和函数的状态
SHOW {PROCEDURE|FUNCTION} STATUS{LIKE 'pattern'}
参数 PROCEDURE 表示查询存储过程,FUNCTION 表示存储函数
参数 LIKE 'pattern' 用来匹配存储过程或函数的名称
4. 使用 SHOW CREATE 语句查看存储过程和函数的定义
SHOW CREATE {PROCEDURE|FUNCTION} proc_name
5. 从 information_schema.Routine 表中查看存储过程和函数的信息
SELECT * FROM information_schema.Routine WHERE ROUTINE_NAME='proc_name'
6. 修改存储过程和函数
ALTER {PROCEDURE|FUNCTION} proc_name[characteristic...]; characteristic: {CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA} |SQL SECURITY{DEFINER|INVOKER} |COMMENT 'string'
参数 proc_name 表示存储过程或函数的名称
参数 characteristic 指定存储过程的特性:
CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句
NO SQL 表示子程序不包含 SQL 语句
READS SQL DATA 表示子程序中包含读数据的语句
MODIFIES SQL DATA 表示子程序中包含写数据的语句
SQL SECURITY{DEFINER|INVOKER} 指明谁有权限执行:
DEFINER 表示只有定义者才能执行
INVOKER 表示调用者可以执行
COMMENT 'string' 是注释信息
7. 删除存储过程和函数
通过 DROP 语句删除存储过程
DROP PROCEDURE proc_name;
通过 DROP FUNCTION 语句删除存储函数
DROP FUNCTION func_name;
以上がMySQL ストアド プロシージャと関数を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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