第9节-MySQL存储过程
9.1、存储过程概述
1、存储过程的定义
定义一段完成特定功能的SQL语句集,经编译后存储在数据库中,用户可以通过指定的存储过程名称并给出参数来执行它,这样的语句集称为存储过程。
2、存储过程的优点
2.1、存储过程是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输,可以利用服务器的计算能力,执行速度快。
2.2、存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码即可,提高了系统性能。
2.3、存储过程在被创建后,可以在程序中多次调用,而不必重新编写,避免开发人员重复的编写相同的SQL语句
2.4、数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
2.5、存储过程可以用流控制语句编写,可以完成复杂的判断和较复杂的运算。
2.6、确保数据库的安全性和完整性
2.7、系统管理员通过对某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免非授权用户对数据的访问。
9.2、存储过程管理
9.2.1、创建和调用存储过程
-- 1、创建存储过程 delimiter $$ create procedure getStudentNames() READS SQL DATA begin select sname from student limit 5; end$$ delimiter ; -- 调用存储过程 call getStudentNames(); -- 2、创建带参数的存储过程 delimiter $$ create procedure findStudent(id varchar(20)) READS SQL DATA begin select sname from student where sno=id; end$$ delimiter ; -- 调用存储过程 call findStudent('95003'); -- 3、创建输入输出参数的存储过程 delimiter $$ create procedure getStudentId(in id varchar(20),out var_name varchar(20)) READS SQL DATA begin select sname into var_name from student where sno=id; end$$ delimiter ; -- 调用存储过程 call getStudentId('95003',@name); select @name;
9.2.2、修改存储过程
-- 修改存储过程 -- 修改权限和加上注释 --- 修改权限字段 CONTAINS SQL:表示子程序包含sQL语句,但不包含读或写数据的语句; NO SQL:表示子程序中不包含sQL语句; READS SQL DATA:表示子程序中包含读数据的语句; MODIFIES SQL DATA:表示子程序中包含写数据的语句。 DEFINER:表示只有定义者自己才能执行; INVOKER:表示调用者可以执行。 COMMENT 'string'是注释信息。 --- delimiter $$ alter procedure getStudentNames READS SQL DATA comment 'alter procedure' $$ delimiter ;
9.2.3、删除存储过程
-- 删除存储过程 drop procedure getStudentNames;
9.2.4、查询存储过程
-- 4、查看存储过程 show procedure status like '%stu%'; show create procedure getStudentId;