存储过程

存储过程:存储过程(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;

删除后的存储过程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值