1、存储过程
一、定义:一组可编程的函数,是为了完成特定功能的SQL语句集,经编译建立并保存在数据库中,用户可经过指定存储过程的名字并给定参数(须要时)来调用执行
二、优势:①将重复性很高的一些操做,封装到一个存储过程当中,简化了对这些SQL的调用
②批量处理:SQL+循环,减小流量,也就是“跑批”
③统一接口,确保数据的安全
三、>存储过程就是具备名字的一段代码,用来完成一个特定的功能。
>建立的存储过程保存在数据库的数据字典中。
四、基本建立格式数据库
1 delimiter// -- 将SQL语句的结束标记设置为// 2 DROP PROCEDURE IF EXISTS testprint; -- 若是存在该名字的存储过程则删除 3 CREATE PROCEDURE testprint() -- 建立一个名字为testprint的存储过程, -- 括号里面能够传参数:CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN -- 代码部分开始 5 SELECT '你好,成都' as infos; -- 存储过程的代码部分 6 END; -- 代码部分结束 7 // -- 结束标记 8 delimiter; -- 编写编译结束后将SQL语句的结束标记还原
五、调用编程
-- 调用无参存储过程 CALL testprint(); -- 调用有参数的存储过程 set @stuid = 1; SET @subid = 1; CALL mytest(@stuid,@subid);
六、存储过程的参数
存储过程能够有0个或多个参数,用于存储过程的定义。
3种参数类型:
IN输入参数:表示调用者向过程传入值(传入值能够是字面量或变量)
OUT输出参数:表示过程向调用者传出值(能够返回多个值)(传出值只能是变量)
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
建议:>输入值使用in参数;
>返回值使用out参数;
>inout参数就尽可能的少用。
例子:
1)、传入学生和科目id ,获得该学生该科目的成绩安全
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS mytest; 3 CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN 5 UPDATE score SET score.scscore=scscore+5 6 WHERE score.sid = sid AND score.suid = suid; 7 END; 8 $$ 9 delimiter; 10 11 set @stuid = 1; 12 SET @subid = 1; 13 CALL mytest(@stuid,@subid);
2)、-- 传入学生序号,获取显示该学生的姓名函数
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS getstuname; 3 CREATE PROCEDURE getstuname(in sid INT,out stuname VARCHAR(100)) 4 BEGIN 5 SELECT student.sname into stuname FROM student WHERE student.sid = sid; 6 END; 7 $$ 8 delimiter; 9 10 set @stuid = 2; 11 CALL getstuname(@stuid,@stuname); 12 SELECT @stuid as sid,@stuname AS stuname;