搜索

第9节-MySQL存储过程


发布时间: 2022-11-24 23:01:00    浏览次数:77 次

9.1、存储过程概述

1、存储过程的定义
   定义一段完成特定功能的SQL语句集,经编译后存储在数据库中,用户可以通过指定的存储过程名称并给出参数来执行它,这样的语句集称为存储过程。
2、存储过程的优点 2.1、存储过程是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输,可以利用服务器的计算能力,执行速度快。 2.2、存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码即可,提高了系统性能。 2.3、存储过程在被创建后,可以在程序中多次调用,而不必重新编写,避免开发人员重复的编写相同的SQL语句 2.4、数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 2.5、存储过程可以用流控制语句编写,可以完成复杂的判断和较复杂的运算。 2.6、确保数据库的安全性和完整性 2.7、系统管理员通过对某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免非授权用户对数据的访问。

9.2、存储过程管理

-- 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;


-- 4、查看存储过程
show procedure status like '%stu%';
show create procedure getStudentId;


-- 5、修改存储过程
-- 修改权限和加上注释

--- 修改权限字段
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 ;


-- 6、删除存储过程
drop procedure getStudentNames;

 

免责声明 第9节-MySQL存储过程,资源类别:文本, 浏览次数:77 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 11:01:00。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/ygbh/p/16923772.html