8,mysql存储过程和存储函数

存储过程和存储函数是一些被用户定义的SQL语句的集合

存储过程可以被程序,触发器,或两外一个存储过程调用。

特点是执行速度快,提高系统性能,确保数据库安全等优点

1,创建存储过程

首先在创建存储过程中的时候需要用到分号,所以需要将结束标识符“;”更改为其他的符号,下面的语句用来更换结束标志符

 
 
  1. mysql> delimiter //  
  2. mysql> select * from user //  
  3. +----+----------+----------+---------------------+  
  4. | id | username | password | createtime          |  
  5. +----+----------+----------+---------------------+  
  6. |  1 | kenan    | kenan    | 2012-10-31 15:32:26 |  
  7. |  3 | kenan    | lele     | 2012-10-31 15:32:26 |  
  8. |  4 | lele     | lele     | NULL                |  
  9. |  5 | 1        | 1        | NULL                |  
  10. +----+----------+----------+---------------------+  
  11. rows in set (0.00 sec) 
第一句 delimiter //声明 //为结束标志符, 所以在第二个SQL语句中用//代替了; 来结束SQL语句

下面创建一个存储过程

 
 
  1. mysql> create procedure count_user (out count int)  
  2.     -> reads sql data  
  3.     -> begin 
  4.     -> select count(*) into count from user;  
  5.     -> end 
  6.     -> //  
  7. Query OK, 0 rows affected (0.14 sec) 
在这里呢,procedure是程序步骤的意思,可以理解为存储过程 ,count_user 就是要创建的存储过程的名字 ()内的东西是存储过程的参数,调用存储过程的时候需要往存储过程里输入一些东西,同样存储过程也会外输出结果, 在这里 有一个参数是 out count int  首先 out表示是输出参数(in表示输入参数),count是参数的名字 int呢,是参数的类型 reads sql data 表明这个存储过程下面要用sql读取数据 begin和 end 用来标示存储过程的语句块的开始和结束 中间有一个SQL语句 select count(*) into count from user into count 表明要把查询出来的count(*)的结果存入到count中

2,创建存储函数,和创建存储过程基本一样,只是有一点的差别

 
 
  1. mysql>  create function get_username(user_id int)  
  2.     ->  returns varchar(50)  
  3.     ->  begin 
  4.     ->  return (select username from user where id = user_id);  
  5.     ->  end 
  6.     ->  //  
  7. Query OK, 0 rows affected (0.09 sec) 
这里创建存储函数的关键字是function,get_username是函数的名字,()内的是函数的参数, user_id int ,其中user_id是参数的名字,int 是参数的类型 和创建存储过程不同的是在创建存储函数的时候需要有返回值的,在创建存储函数的时候,括号内的参数 相当于全部是输入参数,而returns返回值才是输出结果 begin和end同上 这里返回的是根据参数user_id查询出来的username

3,调用存储过程

 
 
  1. mysql> call count_user(@s)//  
  2. Query OK, 1 row affected (0.00 sec)  
  3.  
  4. mysql> select @s  
  5.     -> //  
  6. +------+  
  7. | @s   |  
  8. +------+  
  9. |    4 |  
  10. +------+  
  11. 1 row in set (0.00 sec) 
在这里@后面即一个字符串,表明一个会话变量,在MYSQL中会话变量不用声明即可使用,会话变量在整个过程中都 有效,在这里,调用了存储过程,然后把结果存入了会话变量中,然后查询会话变量,即可查询到结果

4,调用存储函数

 
 
  1. mysql> select get_username(1)//  
  2. +-----------------+  
  3. | get_username(1) |  
  4. +-----------------+  
  5. | kenan           |  
  6. +-----------------+  
  7. 1 row in set (0.06 sec) 
这里直接用select加上函数名即可,然后把需要传入的参数传入

 

本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1050407

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值