为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL之存储过程

标签:
MySQL
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。 
过程:封装起来的若干条语句,调用时这些封装体执行。把此过程存储到数据库中即存储过程. 
函数:是一个有返回值的“过程”。 
过程:没有返回值的函数。 
存储过程的优点:
1、存储过程增强了SQL语言的功能和灵活性(可以SQL编程,能使用变量,表达式、控制结构体)
2、存储过程能实现较快的执行速度。(存储过程要比批处理的执行速度快很多,因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。)
3、存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
4、存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
5、存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
存储过程的创建:
[sql]  view plain copy
  1. DELIMITER $$  //定义分隔符  
  2. CREATE PROCEDURE p()   //p为过程名  
  3. BEGIN  
  4.   --sql语句 //封装语句体  
  5. END $$  

查看已有的存储过程:show procedure status \G;
调用存储过程:call 存储过程名称();
删除存储过程:drop procedure 存储过程名称;

变量声明:存储过程中用declare声明变量
格式:declare 变量名 变量类型 [default 默认值]
存储过程中,变量可以在SQL语句中合法的运算,如+ - * /
运算结果如何赋值  set 变量 := 表达式
存储过程传参:存储过程的括号里,可以声明参数。 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..)
in  out  inout详细分析见下一篇博文(链接下午放出)   

实例一:创建 运算 赋值
[sql]  view plain copy
  1. CREATE PROCEDURE p1()  
  2. BEGIN  
  3.   DECLARE age INT DEFAULT 18;  
  4.   DECLARE height INT DEFAULT 180;  
  5.   SET age := age +20;  
  6.   SELECT CONCAT('年龄是', age, '身高是', height);  
  7. END$$  


实例二 :if/else 控制结构
[sql]  view plain copy
  1. CREATE PROCEDURE p2()  
  2. BEGIN  
  3.   DECLARE age INT DEFAULT 18;  
  4.   DECLARE height INT DEFAULT 180;  
  5.   IF age >= 18 THEN  
  6.     SELECT "已成年";  
  7.   ELSE  
  8.     SELECT "未成年";  
  9.   END IF;  
  10. END$$  


实例三:while/do 控制结构
求1-100的和
[sql]  view plain copy
  1. CREATE PROCEDURE p3()  
  2. BEGIN  
  3.   DECLARE total INT DEFAULT 0;  
  4.   DECLARE num INT DEFAULT 0;  
  5.   WHILE num<=100 DO  
  6.     SET total := num + total;  
  7.     SET num := num + 1;  
  8.    END WHILE;  
  9.    SELECT total;  
  10. END$$  

实例四:case 控制结构
[sql]  view plain copy
  1. CREATE PROCEDURE p4()  
  2. BEGIN  
  3.   DECLARE num INT DEFAULT 0;  
  4.   SET num := FLOOR(4*RAND());  
  5.   CASE num  
  6.   WHEN 1 THEN SELECT "cat";  
  7.   WHEN 2 THEN SELECT "dog";  
  8.   WHEN 3 THEN SELECT "sheep";  
  9.   ELSE SELECT "pig";  
  10.   END CASE;  
  11. END$$  


实例五:repeat循环
[sql]  view plain copy
  1. CREATE PROCEDURE p5()  
  2. BEGIN  
  3.   DECLARE num INT DEFAULT 0;  
  4.   DECLARE total INT DEFAULT 0;  
  5.   REPEAT  
  6.     SET total = num + total;  
  7.     SET num := num + 1;  
  8.   UNTIL num>100 END REPEAT;  
  9.   SELECT total;  
  10. END$$  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消