mysql:存储过程

一、存储过程介绍

1、什么是存储过程?

存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行。

2、存储过程的优点?

(1)存储过程创建后,就可以反复地调用和使用,不需要重新写复杂的语句

(2)创建,修改存储过程不会对数据有任何的影响

(3)存储过程可以通过输入参数返回输出值

(4)通过存储过程中加入控制语句,可以加强sql语句的功能性和灵活性

(5)对于单个语句增删改查,可以直接封装一个集合中,存储过程一旦创建就可以直接调用,且可以重复调用

(6)单个sql语句每一次执行都需要对数据进行编译,而存储过程被创建只需要编译一次,后续即可调用

(7)创建的存储过程,可以重复进行调用,可以减少数据库开发人员的工作量

(8)防止sql 注入

(9)造数据(重点)

3、mysql5.0版本之后就支持存储过程,存储过程是由sql语句和控制语句组成的

二、存储的格式

1、基本格式(不带参数):

delimiter //  分隔符

drop (删除)  PROCEDURE (存储) if EXISTS(判断是否存在)  cc1  存储;

create(创建)   PROCEDURE(存储)  cc1()  存储名称

BEGIN 开始

          select  * from  emp ;  存储体1

          select  *  from  dept ;存储体2

END  结束存储

//  分割符

call  cc1()  调用   存储名称

案例:

delimiter //

drop  PROCEDURE if EXISTS  cc1 ;

create   PROCEDURE  cc1()

BEGIN

   select  * from  emp ;

   select  *  from  dept ;

END

//

call  cc1()

图片

2、带传入参数(in)

格式:

delimiter //

drop  PROCEDURE if EXISTS  存储名称;

create   PROCEDURE  存储名称( in x int)

BEGIN

  语句1

END

//

call  存储名(实际参数)

案例:

delimiter //

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2( in x int)

BEGIN

   select  * from  emp  where  dept2=x;

END

//

call  cc2(105)

图片

3、in输入值、out 返回值

select  * from emp ;

desc emp ;

delimiter //

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2( in x int,out y int)

BEGIN

   select  age  into y from  emp  where  dept2=x;

END

//

call  cc2(105,@y)

select  @y

图片

4、inout  一个变量是输入值也是输出值

案例:

delimiter //

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2( inout x int)

BEGIN

   set x=x+1;

END

//

set @x=1

call  cc2(@x)

select  @x

图片

5、设置变量方法:

set     @ 变量名 

赋值的方法:

(1)方式一

set   @ 变量名:=值  设置一个变量值

select  @变量名  显示所有数据

图片

(2)方式二

通过查询结果为变量赋值:

select   字段   into     变量名     from  表名   where    条件

图片

后面可以用:select @y           去查看结果

6、循环语句

while  循环语句:

格式

while   条件  do

sql语句

end while

7、造数据场景

(1)传入固定值

create table m1 (id int(10) PRIMARY key ,name varchar(20));

delimiter //

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2( )

BEGIN

  INSERT  into  m1(id)  VALUES(2);

  SELECT  *  from m1;

END

//

call  cc2()

(2)出入变量值的数据

案例

delimiter //

drop  table if EXISTS m1;

create table m1 (id int(10) PRIMARY key ,name varchar(20));

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2(in  x  int )

BEGIN

DECLARE  i int  DEFAULT 0 ;

WHile  (i<x) do

     INSERT  into  m1(id)  VALUES(i);

     set i=i+1;

end while;

  SELECT  *  from m1;

END

//

call  cc2(10)

图片

(3)先统计总数量,再插入传入的值

delimiter //

drop  table if EXISTS m1;

create table m1 (id int(10) PRIMARY key ,name varchar(20));

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2(in  x  int )

BEGIN

DECLARE  i int  DEFAULT (select  count(*) from m1) ;

WHile  (i<x) do

     INSERT  into  m1(id)  VALUES(i);

     set i=i+1;

end while;

  SELECT  *  from m1;

END

//

call  cc2(10)

(4)每次删除表,再重新插入数据

delimiter //

drop  PROCEDURE if EXISTS  cc2 ;

create   PROCEDURE  cc2(in  x  int )

BEGIN

DECLARE  i int  DEFAULT 0 ;

drop  table if EXISTS m1;

create table m1 (id int(10) PRIMARY key ,name varchar(20));

WHile  (i<x) do

     INSERT  into  m1(id)  VALUES(i);

     set i=i+1;

end while;

  SELECT  *  from m1;

END

//

call  cc2(3)

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值