本文整理自网络,侵删。
目录
- 一、存储过程的简单使用
- 二、存储过程中的变量
- 三、变量的作用域
- 四、存储过程参数
- 五、逻辑控制语句
- 1、条件语句
- 2、循环语句
- 3、case分支
- 六、游标
- 七、自定义函数
- 八、触发器
- 九、事件
存储过程(Stored Procedure)是一种在数据库中存储复杂程序的数据库对象。为了完成特定功能的SQL语句集,经过编译创建并保存在数据库中。
一、存储过程的简单使用
创建存储过程
create procedure test() begin select * from users; end;
调用存储过程
call test();
二、存储过程中的变量
create procedure test() begin -- 使用 declare语句声明一个变量 declare username varchar(32) default ''; -- 使用set语句给变量赋值 set username='xiaoxiao'; -- 将users表中id=1的名称赋值给变量username select name into username from users where id=1; -- 返回变量 select username; end;
注意:
- 变量可以通过set来赋值,也可以通过select into的方式赋值;
- 变量需要返回,可以使用select语句,如:select 变量名。
三、变量的作用域
存储过程的作用域在begin和end块之间,变量声明在begin之外,可以作为全局变量使用:
create procedure test() begin declare userscount int default 0; -- 用户表中的数量 begin select count(*) into userscount from users; select userscount; -- 返回用户表中的数量 end; begin declare maxmoney int default 0; -- 最大金额 select max(money) into maxmoney from orders; select userscount,maxmoney; -- 返回用户表中的数量、最大金额 end; end;
四、存储过程参数
create procedure 名称([IN|OUT|INOUT] 参数名 参数数据类型 ) begin ...... end
IN: 传入参数(不指定时,默认就是IN类型)
create procedure test(userId int) begin declare username varchar(32) default ''; select name into username from users where id=userId; select username; end;
OUT:传出参数
create procedure test(in userId int,out username varchar(32)) begin select name into username from users where id=userId; end;
INOUT: 既是传入又是传出参数
create procedure test6(inout userId int,inout username varchar(32)) begin set userId=2; set username=''; select id,name into userId,username from users where id=userId; end;
五、逻辑控制语句
1、条件语句
if() then... elseif() then... else ... end if;
create procedure test(in userid int) begin declare my_status int default 0; select status into my_status from users where id=userid; if(my_status=1) then update users set score=score+10 where id=userid; elseif(my_status=2) then update users set score=score+20 where id=userid; else update users set score=score+30 where id=userid; end if; end;
2、循环语句
(1)while
while(表达式) do ...... end while;
create procedure test() begin declare i int default 0; while(i<10) do begin select i; set i=i+1; insert into test1(id) values(i); end; end while; end;
(2)repeat
repeat...until...end repeat;
只有当until为真是才跳出循环:
create procedure test() begin declare i int default 0; repeat begin select i; set i=i+1; insert into test1(id) values(i); end; until i>=10 -- 如果i>=10,则跳出循环 end repeat; end;
3、case分支
case ... when ... then.... when.... then.... else ... end case;
create procedure testcate(userid int) begin declare my_status int default 0; select status into my_status from users where id=userid; case my_status when 1 then update users set score=10 where id=userid; when 2 then update users set score=20 where id=userid; when 3 then update users set score=30 where id=userid; else update users set score=40 where id=userid; end case; end;
六、游标
游标保存了查询结果的临时区域
declare 变量名 cursor ... -- 创建一个游标变量 close 变量名; -- 关闭游标
create procedure test() begin declare stopflag int default 0; declare username VARCHAR(32); declare username_cur cursor for select name from users where id%2=0; -- 游标变量username_cur保存了查询的临时结果,即结果集 -- 在游标变量中数据的结尾,将变量stopflag设置为1,用于循环中判断是否结束 declare continue handler for not found set stopflag=1; open username_cur; -- 打卡游标 fetch username_cur into username; -- 游标向前走一步,取出一条记录放到变量username中 while(stopflag=0) do -- 如果游标还没有结尾,就继续 begin -- 在用户名前门拼接 '_cur' 字符串 update users set name=CONCAT(username,'_cur') where name=username; fetch username_cur into username;-- 游标向前走一步,取出一条记录放到变量username中 end; end while; -- 结束循环 close username_cur; -- 关闭游标 end;
七、自定义函数
-- 创建函数 create function 函数名(参数) returns 返回类型; -- 函数体 begin ...... end; -- 指定函数的返回值 returns --函数调用 select 函数名()。
create function getusername(userid int) returns varchar(32) reads sql data -- 从数据库中读取数据,但不修改数据 begin declare username varchar(32) default ''; select name into username from users where id=userid; return username; end;
八、触发器
触发器也是一种数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
相关阅读 >>
mysql中utf8_unicode_ci、utf8_general_ci有什么区别?
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » Mysql存储过程、触发器、事件调度器使用入门指南
标签:mysql
相关推荐
评论
管理员已关闭评论功能...