一、什么是存储过程?
存储过程是一些预编译的SQL语句。存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。
更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
或者这样理解:存储过程就类似于函数,就是把一段具有一定功能的T-SQL语句代码封装起来,当要执行这些代码的时候,可以通过调用该存储过程来实现。在封装的语句体里面,可以使用if/else,case,while等控制结构。可以进行SQL编程。
(1)查看现有的存储过程:>show procedures status;
(2)删除存储过程:>drop procedure 存储过程的名字;
eg1: 有存储过程p1,p2,可以 >drop procedure p1;
eg2: 第一个存储过程,体会封装SQL
> delimiter $
create procedure p1() //加小括号是因为相当于函数,可以有参数
begin
select * from goods;
end$
eg3: 第二个存储过程,体会参数
> delimiter $
create procedure p2(n int) //加小括号是因为相当于函数,可以有参数
begin
select * from goods where num>n;
end$
调用存储过程: >call p2(10)$ //查询数量大于10的商品
eg4: 第三个存储过程,体会控制结构
> delimiter $
create procedure p3(j varchar(1), n tinyint)begin
if j='h' then
select * from g where num>n;
else
select * from g where num<n;
end if;
end$
调用存储过程: >call p3('h',10)$ 或者 >call p3('1',10)$
eg5: 第四个存储过程,体会循环
计算1-n的和
>create procedure p4(n tinyint)
begindeclare i int; //声明变量i
declare s int;
set i=1; //设置变量的值i=1
set s=0;
while i<=n do //循环
set s=s+i;
set i=i+1;
end while;
select s;
end$
调用存储过程: >call p4(100)$
二、 存储过程的优点
1. 存储过程的能力大大增强了SQL语言的功能和灵活性。
原因:(1)存储过程可以用流控制语句编写(可以使用if/else,case,while等控制结构),有很强的灵活性,可以完成复杂的判断和较复杂的运算。
2. 可以减少网络的通信量
原因:调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能 绝对比一条一条的调用SQL语句要高得多。 存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
3. 执行速度更快。
原因:(1)在存储过程创建的时候,数据库已经对其进行了一次解析和优化(数据库已对其进行了语法和句法分析,并给出了优化执行方案),由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
(2)存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。
4. 可保证数据的安全性和完整性
原因:(1)通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
(2)通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
5. 更强的适应性(同4)6. 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
(2)存储过程可以有数据库管理软件修改,使得多层结构程序调整系统逻辑时,并不需要编译和分发程序。
(3)存储过程执行中,不会引起网络流量,不占用程序服务器的内存和CPU资源。
复杂的数据处理用存储过程,如有些报表处理。
多条件多表联合查询,并做分页处理,用存储过程也比较适合。
适当的使用存储过程,能够提高我们SQL查询的性能,以便于提高我们的工作效率。