存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
优点:
1增强SQL语言的功能和灵活性
2存储过程被创建后,可以在程序中被多次调用,预编译的
3较快的执行速度
4减少网络流量
5保证数据的安全
缺点:
1)可移植性差
2)对于简单的SQL语句,存储过程没什么优势
3)如果存储过程中不一定会减少网络传输
4)如果只有一个用户使用数据库,那么存储过程对安全也没什么影响
5)团队开发时需要先统一标准,否则后期维护成本大
6)在大并发量访问的情况下,不宜写过多涉及运算的存储过程
7)业务逻辑复杂时,特别是涉及到对很大的表进行操作的时候,不如在前端先简化业务逻辑
存储过程的创建和使用
修改默认的sql语句的结尾标志为%
delimiter %
创建:
create procedure selCg()
begin
select * from test.`user`;
end%
调用:
call selCg()%
in:传入参数
%仍然为结尾标志
mysql> create procedure test(in abc int)
-> begin
-> select abc;
-> set abc=2;
-> select abc;
-> end%
局部变量:set @y=1%
调用:
call test(@y)%
in参数的实例:
create database bookdatabase;
use bookdatabase;
create table book(id int,name varchar(20))ENGINE=MyISAM,DEFAULT CHARSET=utf8;
insert into book values(1,"网络程序设计"),(2,"算法导论");
delimiter %
mysql> create procedure getname(in a int)
-> begin
-> select * from book where id=a;
-> end%
mysql> call getname(1)%
out:传出参数
mysql> delimiter //
mysql> create procedure outdemo(out p int)
-> begin
-> select p;
-> set p=2;
-> select p;
-> end//
Query OK, 0 rows affected (0.00 sec)
mysql> set @p=100//
Query OK, 0 rows affected (0.00 sec)
mysql> call outdemo(@p)//
inout:读取外部变量,在存储过程执行完后保留新值
不带参数的存储过程
循环存储内容到一个表
mysql> create table t2(id int);
mysql> create procedure t1(n int)
-> begin
-> set @x=0;
-> repeat set @x=@x+1;
-> insert into t2 values(@x);
-> until @x>n
-> end repeat;
-> end //
mysql> call t1(5) //
mysql> select * from t2 //
变量声明:declare
变量赋值:set
“--“:单行注释
“/*…..*/”:一般用于多行注释
存储过程的查看
show procedure status \G;
存储过程的删除
drop procedure if exists test;
删除后的存储过程