设为首页 - 加入收藏 哈密站长网 (http://www.0902zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 纷纷 数据中心 2003 发布
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL数据库之存储过程的创建和调用

发布时间:2018-11-13 07:00 所属栏目:[MySql教程] 来源:架构师之旅
导读:MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要

MySQL数据库之存储过程的创建和调用

MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

优点

  • ?存储过程可封装,并隐藏复杂的商业逻辑。
  • ?存储过程可以回传值,并可以接受参数。
  • ?存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
  • ?存储过程可以用在数据检验,强制实行商业逻辑等。

缺点

  • ?存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
  • ?存储过程的性能调校与撰写,受限于各种数据库系统。

存储过程的创建和调用

创建存储过程

  1. CREATE??
  2. ?[DEFINER?=?{?user?|?CURRENT_USER?}]??
  3.  PROCEDURE?sp_name?([proc_parameter[,...]])??
  4. ?[characteristic?...]?routine_body???
  5. proc_parameter:??
  6. ?[?IN?|?OUT?|?INOUT?]?param_name?type???
  7. characteristic:??
  8. ?COMMENT?'string'??
  9. ?|?LANGUAGE?SQL??
  10. ?|?[NOT]?DETERMINISTIC??
  11. ?|?{?CONTAINS?SQL?|?NO?SQL?|?READS?SQL?DATA?|?MODIFIES?SQL?DATA?}??
  12. ?|?SQL?SECURITY?{?DEFINER?|?INVOKER?}???
  13. routine_body:??
  14. Valid?SQL?routine?statement???
  15. [begin_label:]?BEGIN??
  16. [statement_list]??
  17. ……??
  18. END?[end_label]?

MYSQL 存储过程中的关键语法

1.声明语句结束符,可以自定义:

  1. DELIMITER?$$??
  2. 或??
  3. DELIMITER?//?

2.声明存储过程:

  1. CREATE?PROCEDURE?demo_in_parameter(IN?p_in?int)??

3.存储过程开始和结束符号:

  1. BEGIN?....?END??

4.变量赋值:

  1. SET?@p_in=1??

5.变量定义:

  1. DECLARE?l_int?int?unsigned?default?4000000;??

6.创建mysql存储过程、存储函数:

  1. create?procedure?存储过程名(参数)?

7.存储过程体:

  1. create?function?存储函数名(参数)?

实例

1.创建数据库,备份数据表用于示例操作:

  1. mysql>?create?database?db1;??
  2. mysql>?use?db1;???
  3. mysql>?create?table?PLAYERS?as?select?*?from?TENNIS.PLAYERS;??
  4. mysql>?create?table?MATCHES?as?select?*?from?TENNIS.MATCHES;?

2.下面是存储过程的例子,删除给定球员参加的所有比赛:

  1. mysql>?delimiter?$$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)??
  2. mysql>?CREATE?PROCEDURE?delete_matches(IN?p_playerno?INTEGER)??
  3. ?->?BEGIN??
  4. ?->?DELETE?FROM?MATCHES??
  5. ?->?WHERE?playerno?=?p_playerno;??
  6. ?->?END$$??
  7. Query?OK,?0?rows?affected?(0.01?sec)??
  8. mysql>?delimiter;#将语句的结束符号恢复为分号?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章