一、存储过程介绍:
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而
一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速
度。
2.当对数据库进行复杂操作时(如对多个表进行
Update,Insert,Select,Delete 时),可将此复杂操作用存储过程封装起来
与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某个用户才具有对指定存储过程的使用权。
二、使用存储过程的优缺点:
相对于直接使用SQL 语句,在应用程序中直接调用存储过程有以下好处:
1.减少网络通信量:调用一个行数不多的存储过程与直接调用SQL 语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL 语句,那么其性能绝对比一条一条的调用SQL 语句要高得多。
2.执行速度更快:有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。
3.更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
4.分布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
5.可以防止sql注入。
缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
2.可移植性差 由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。
三、存储过程(stored procedure)、存储例程(store routine)、存储函数区别:
Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
四、使用例子:
1.基础语法:
DELIMITER // 声明语句结束符,用于区分;
CEATE PROCEDURE 方法名(IN p_in int) 声明存储过程
BEGIN ... END 存储过程开始和结束符号
SET @p_in=1 变量赋值
DECLARE i_int int unsigned default 0; 变量定义
2.创建测试表
drop table if EXISTS aa;
create table aa(
id int(11) not null auto_increment,
`name` varchar(15),
age varchar(5),
sex varchar(2),
primary key(id)
)ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试表';
3.建立批量添加数据
#清空数据
TRUNCATE table aa;
#定义存储过程
delimiter //
DROP PROCEDURE IF EXISTS insert_aa_val;
CREATE PROCEDURE insert_aa_val(in sum int)
BEGIN
DECLARE i int default 1;
DECLARE `name` varchar(20) default "a";
DECLARE age varchar(20) default "b";
DECLARE sex varchar(20) default "c";
WHILE i<= sum do
SET `name` = "a";
SET age = "b";
SET sex = "c";
INSERT into aa values (null,`name`,age,sex);
set i = i + 1;
END WHILE;
END;//
4.调用存储过程
#调用存储过程
call insert_aa_val(10);