MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。

编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。

下面主要介绍如何创建存储过程。

可以使用 CREATE PROCEDURE 语句创建存储过程,语法格式如下:

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>

语法说明如下:

1) 过程名

存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。

需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。

2) 过程参数
存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。

MySQL 存储过程支持三种类型的参数,即输入参数输出参数输入/输出参数,分别用 INOUTINOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。

需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。

3) 过程体
存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。

在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。

在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。

为解决以上问题,通常使用 DELIMITER 命令将结束命令修改为其他字符。语法格式如下:

DELIMITER $$

语法说明如下:
$$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。
当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为它是 MySQL 的转义字符。

在 MySQL 命令行客户端输入如下 SQL 语句。

mysql > DELIMITER ??

成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。

若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:

mysql > DELIMITER ;

注意:DELIMITER 和分号“;”之间一定要有一个空格。在创建存储过程时,必须具有 CREATE ROUTINE 权限。

例 1
创建名称为 ShowStuScore 的存储过程,存储过程的作用是从学生成绩信息表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。

mysql> DELIMITER //> CREATE PROCEDURE ShowStuScore()-> BEGIN-> SELECT * FROM tb_students_score;-> END //

结果显示 ShowStuScore 存储过程已经创建成功。

例 2
创建名称为 GetScoreByStu 的存储过程,输入参数是学生姓名。存储过程的作用是通过输入的学生姓名从学生成绩信息表中查询指定学生的成绩信息,输入的 SQL 语句和执行过程如下所示。

mysql> DELIMITER //
mysql> CREATE PROCEDURE GetScoreByStu-> (IN name VARCHAR(30))-> BEGIN-> SELECT student_score FROM tb_students_score-> WHERE student_name=name;-> END //
Query OK, 0 rows affected (0.01 sec)

2、MySQL创建存储过程(CREATE PROCEDURE)(函数)相关推荐

  1. 创建存储过程create procedure

    创建存储过程create procedure drop procedure if exists test01; delimiter SETAUTOCOMMIT=0SET AUTOCOMMIT = 0S ...

  2. mysql 创建存储过程语法_mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

  3. 【MySQL】存储过程与存储函数

    存储过程与存储函数 1 存储过程 1.1介绍 存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提 ...

  4. MYSQL中如何创建存储过程和存储函数(上篇)

    存储程序分为存储过程和存储函数.在MySQL中创建存储过程和存储函数的语句分别是create procedure 和create function.使用call语句来调用存储过程,只能用输出变量返回值 ...

  5. MySQL存储过程(CREATE PROCEDURE 存储过程名(参数列表))

    MySQL存储过程 #存储过程 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 * ...

  6. mysql创建存储过程及函数详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...

  7. MySQL创建存储过程(CREATE PROCEDURE)

    MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面 ...

  8. mysql 存储过程 set into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法...

    本文实例讲述了mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法.分享给大家供大家参考,具体如下: 存储过程创建(CRE ...

  9. mysql call procedure into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量...

    本文实例讲述了mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法.分享给大家供大家参考,具体如下: 存储过程创建(CRE ...

最新文章

  1. RHEL5下NFS服务器配置与应用
  2. ETSafeMail安全电子邮件技术白皮书
  3. JavaScript基础总结
  4. 基于python爬虫技术的应用_基于Python爬虫技术的应用
  5. vsftpd默认用户名/密码
  6. 格式 数组的基本使用 0912
  7. 6月21日武汉见!华为nova 5正式官宣:麒麟980+40W快充
  8. oracle角色与权限
  9. VirtualBox的vdi文件复制
  10. 数组累加兼eval性能测试
  11. 基于sklearn 的one hot encoding
  12. 算法:回溯七 Permutation Sequence数组全排列定位
  13. jrtplib for android,Jrtplib Android平台编译
  14. 如何政治正确地黑咪蒙?!
  15. 【中兴笔试题】三角形面积
  16. 海信电视power android,海信电视工厂模式中“To Fac”设置“U”、“M”参数不完全对比...
  17. turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程
  18. 杨立昆怒怼机器人索菲娅:AI硬加人类意识是揠苗助长
  19. 字符串数组大写小写互相转换
  20. 申请专利 服务器拒收怎么找回,找回或修改登录密码的方法及装置专利_专利申请于2014-10-23_专利查询 - 天眼查...

热门文章

  1. 成功解决AttributeError: Unknown property axisbg
  2. 自动化机器学习(二)自动构建机器学习流水线
  3. L1,L2正则化分析
  4. 快速创建springBoot
  5. jQuery插件 -- Cookie插件
  6. 科目二倒车入库不论怎么都能入进去的方法
  7. Unity3d简单的socket通信
  8. 设计模式(八): 从“小弟”中来类比外观模式(Facade Pattern)
  9. jquery操作iframe
  10. 209计算机考试题库,计算机考试题库:计算机考试模拟练习题(209)