[转帖]mysql基础专题——7.mysql存储过程和存储函数_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3407 | 回复: 0   主题: [转帖]mysql基础专题——7.mysql存储过程和存储函数        下一篇 
eink
注册用户
等级:上尉
经验:764
发帖:54
精华:0
注册:2012-11-13
状态:离线
发送短消息息给eink 加好友    发送短消息息给eink 发消息
发表于: IP:您无权察看 2012-11-16 9:50:57 | [全部帖] [楼主帖] 楼主

存储过程和存储函数是一些被用户定义的SQL语句的集合
存储过程可以被程序,触发器,或两外一个存储过程调用。
特点是执行速度快,提高系统性能,确保数据库安全等优点
1,创建存储过程
首先在创建存储过程中的时候需要用到分号,所以需要将结束标识符“;”更改为其他的符号,下面的语句用来更换结束标志符

1mysql> 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 4 rows in set (0.00 sec)


第一句 delimiter //声明 //为结束标志符, 所以在第二个SQL语句中用//代替了;

来结束SQL语句

12


下面创建一个存储过程

mysql> create procedure count_user (out count int)
13     -> reads sql data
14     -> begin
15     -> select count(*) into count from user;
16     -> end
17     -> //
18 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

19


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

mysql>  create function get_username(user_id int)
20     ->  returns varchar(50)
21     ->  begin
22     ->  return (select username from user where id = user_id);
23     ->  end
24     ->  //
25 Query OK, 0 rows affected (0.09 sec)


这里创建存储函数的关键字是functionget_username是函数的名字,()内的是函数的参数,

user_id int ,其中user_id是参数的名字,int 是参数的类型 

和创建存储过程不同的是在创建存储函数的时候需要有返回值的,在创建存储函数的时候,括号内的参数

相当于全部是输入参数,而returns返回值才是输出结果

beginend同上

这里返回的是根据参数user_id查询出来的username

26


3,调用存储过程

mysql> call count_user(@s)//
27 Query OK, 1 row affected (0.00 sec)
28
29 mysql> select @s
30     -> //
31 +------+
32   @s
33 +------+
34      4
35 +------+
36 1 row in set (0.00 sec)


在这里@后面即一个字符串,表明一个会话变量,在MYSQL中会话变量不用声明即可使用,会话变量在整个过程中都

有效,在这里,调用了存储过程,然后把结果存入了会话变量中,然后查询会话变量,即可查询到结果

37


4,调用存储函数

mysql> select get_username(1)//
38 +-----------------+
39   get_username(1)
40 +-----------------+
41   kenan
42 +-----------------+
43 1 row in set (0.06 sec)


这里直接用select加上函数名即可,然后把需要传入的参数传入

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

该贴被eink编辑于2012-11-16 10:05:30



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论