存储过程定义:一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。
存储过程通常有以下优点:
(1)存储过程在服务器端运行,执行速度快。
(2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。
(3)确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。
(4) 存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
这里插入一个关于游标的概念:
作用:用于对查询数据库所返回的记录进行遍历,以便进行相应的操作
声明一个游标:
DECLARE 游标名 CURSOR FOR select语句
开启一个游标:OPEN 游标名
游标打开后,就可以使用FETCH…INTO语句从中读取数据。
FETCH游标名INTO 变量名 ...
关于存储过程的写法:
1.创建存储过程:create procedure 存储过程名(参数列表)
2.调用存储过程:CALL 存储过程名([参数 ... ])
3.存储过程的删除: DROP PROCEDURE [IF EXISTS] 存储过程名
4.存储过程的修改:ALTER PROCEDURE 存储过程名 [特征 ...]
(特征:CONTAINS SQL,SQL SECURITY。COMMENT ‘string’)
接下来给大家举一个例子:创建一个存储函数来删除xs_kc表中有,但xs表中不存在的学号(最近在学汇编 感觉某种形式上有些类似)
delimiter $$
create function delete_stu(xh char(6))
returns boolean
begin
declare stu char(6);
select 姓名 into stu from xs where 学号=xh;
if stu is null then
delete from xs_kc where 学号=xh;
return true;
else
return false;
end if;
end$$
delimiter ;