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

基本语法 可以使用 CREATE PROCEDURE 语句创建存储过程。

语法格式如下:

CREATE PROCEDURE ( [过程参数[,…] ] )

[过程参数[,…] ] 格式

[ IN | OUT | INOUT ] 语法说明如下:

1) 过程名 存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。

2) 过程参数 存储过程的参数列表。其中,

为参数名,

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

MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 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 权限。可以使用 SHOW PROCEDURE STATUS 命令查看数据库中存在哪些存储过程,若要查看某个存储过程的具体信息,则可以使用 SHOW CREATE PROCEDURE 。

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

mysql> DELIMITER //

mysql> CREATE PROCEDURE ShowStuScore()

-> BEGIN

-> SELECT * FROM tb_students_score;

-> END //

Query OK, 0 rows affected (0.09 sec) 创建存储过程 ShowStuScore 后,通过 CALL 语句调用该存储过程的 SQL 语句和执行结果如下所示。

mysql> DELIMITER ;

mysql> CALL ShowStuScore();

+--------------+---------------+

| student_name | student_score |

+--------------+---------------+

| Dany | 90 |

| Green | 99 |

| Henry | 95 |

| Jane | 98 |

| Jim | 88 |

| John | 94 |

| Lily | 100 |

| Susan | 96 |

| Thomas | 93 |

| Tom | 89 |

+--------------+---------------+

10 rows in set (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

创建带参数的存储过程 【实例 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) 创建存储过程 GetScoreByStu 后,通过 CALL 语句调用该存储过程的 SQL 语句和执行结果如下所示。

mysql> DELIMITER ;

mysql> CALL GetScoreByStu('Green');

+---------------+

| student_score |

+---------------+

| 99 |

+---------------+

1 row in set (0.03 sec)

Query OK, 0 rows affected (0.03 sec)

mysql create procedure_MySQL创建存储过程(CREATE PROCEDURE)相关推荐

  1. 创建存储过程create procedure

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

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

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

  3. MySQL实验七创建存储过程和函数

    这里写自定义目录标题 一 实验目的 二 实验平台 三 实验内容和要求 3.1 创建存储过程 3.2 查看存储过程 3.3 修改存储过程 3.4 删除存储过程 3.5 创建函数 3.6 查看函数 3.7 ...

  4. mysql无法创建存储过程(stored procedure

    在mysql下 mysql> CREATE PROCEDURE myproc() BEGIN END; 出现: Error Code: 1655 Cannot create stored rou ...

  5. 图解MySql命令行创建存储过程

    一 操作实例 首先登录mysql: 使用source命令,从命令行执行sql脚本,创建表: 创建第一个存储过程: 事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";&q ...

  6. mysql 存储过程 replace_mysql 存储过程 create or replace

    MySQL和Oracle对比之存储过程 昨天晚上帮一个朋友处理了一个关于存储过程的问题,他需要迁移一些Oracle中的存储过程到MySQL中来,但是改了一部分的程序,发现MySQL中没法编译了,报了很 ...

  7. mysql jdbc 创建存储过程_mysql JDBC 调用存储过程

    与oracle不同,mysql不支持匿名块,如果需要写过程语句,则必需定义存储过程.如果你会oracle的存储过程,那么mysql的存储过程也很简单了. 一.创建存储过程 create procedu ...

  8. 如何在mysql中创建过程_如何在MySQL 中创建存储过程?

    问题阐述 自MySQL 5.0 开始,MySQL 就支持存储过程.存储过程是一些被用户定义的SQL 语句集合.一个存储程序是可以被存储在服务器中的一套SQL 语句.存储过程可以被程序.触发器或另一个存 ...

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

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

最新文章

  1. 怎么逐步突破,成为Python高手?
  2. POJ 3620-Avoid The Lakes
  3. MapReduce 计数器简介
  4. win10 详细配置JAVA环境变量(最详细),操作步骤如下:
  5. Java 中判断连接Oracle数据库连接成功
  6. Lemmy仿Reddit社区 v0.8.10源码
  7. python设计模式1-单例模式
  8. ubuntu下 ls: error initializing month strings
  9. form表单属性名相同java_form表单提交 list对象给Java 后台结合
  10. spring整合atomikos实现分布式事务的方法示例_分布式-分布式事务处理
  11. 配合Opencv2.4.9,CMake3.12.1和VS2010在win10下构建项目踩坑记录
  12. WIN10找不到服务器共享文件,win10没有共享选项怎么办_win10文件属性没有共享选项的解决方法...
  13. 公司使用 Qt 到底要不要付费?| 博文精选
  14. iOS-Senior19-FMDB第三方应用
  15. jdk1.8 64位与32位免费下载
  16. 打字练习网站keybr.com
  17. 安卓-LBS地图显示
  18. 运维安全:微软远程桌面修改默认远程端口
  19. php cms下载地址,下载phpcms详细步骤
  20. g 最新编译器linux,Linux下安装gcc 、g++ 、gfortran编译器

热门文章

  1. deep deepfm wide 区别_CTR预估之WideDeep和DeepFM
  2. sql中limit的用法
  3. mysql sql数值转字符拼接_sql中的字符串拼接
  4. 罗技鼠标在中国做的真是差
  5. 组件化cocoapods仓库删除(填坑)
  6. 运维教程之Microsoft SQL server 2008 R2图文+视频安装
  7. 数据库隔离级别实现原理
  8. 【无标题】Android在activity之间发送数据(putExtra方法)
  9. SAP770系统FI模块配置(维护会计年度变式)
  10. java跟python优势_当前Java与Python相比还有哪些优势