代码改变世界

mysql 存储过程

2017-08-31 15:09  晨曦曙光  阅读(341)  评论(0编辑  收藏  举报

1..创建存储过程

DELIMITER //  (创建过程前先要修改mysql的结束符为//)

create procedure proc1()(创建一个存储过程,方法名为proc1())

begin (存储过程开始)

declare var int  default 100;(声明一个变量var 类型为int 类型 默认值为100)

select var;(输出这个变量值)

end// (存储过程结束)

DELIMITER ;(结束后要把结束符修改回;)

call proc1();(存储过程的调用)

2.通过set关键字修改变量值

 

DELIMITER //  (创建过程前先要修改mysql的结束符为//)

 

create procedure proc1()(创建一个存储过程,方法名为proc1())

 

begin (存储过程开始)

 

declare var int  default 100;(声明一个变量var 类型为int 类型 默认值为100

 

select var;(输出这个变量值)

set var = var +10;(通过set关键字修改变量值)

 select  var ;

end// (存储过程结束)

 

DELIMITER ;(结束后要把结束符修改回;)

 

call proc1();

3.查询数据表中的指定数据

DELIMITER //

create procedure proc3()

begin 

declare var1 varchar(20);//声明类型为varchar 的变量var1

declare var2 int ;//声明类型为int的变量var2

//选择来自student数据表中ID为1中的name和age 两个字段中的数据放入var1和var2这两个变量中

select name, age into var1,var2 from student where id =1;

select var1 as '姓名' ,var2 as '年龄';//给变量var1取别名为姓名,var2取别名“年龄”

end //

DELIMITER ;

call proc3();

4.存储过程中的油标使用

DELIMITER //

create procedure proc4()

begin 

declare var1 varchar (20);

declare var2 int ;

 //声明一个游标变量用来存储student 数据表中指定的数据值

declare getNameAge_Stu1 cursor for select name,age from student where id = 1;

open getNameAge_Stu1;//打开游标变量

fetch getNameAge_Stu1 into var1,var2;// 获取游标变量中的数据放入var1,和var2这两个变量中。顺序为查询数据的顺序

close getNameAge_Stu1;//关闭游标

select var1 as '姓名' ,var2 as '年龄';//为变量取别名并输出

end //

DELIMITER ;

call proc4();

5.存储过程中的流程控制(if 语句)

 

DELIMITER //
create procedure proc5()
begin
declare var int;
if var is null then select 'var is null';//如果变量var为null 就输出var is null 
else select 'var is not null';//否则输出var is not null 
end if;//结束if语句
end //(结束创建过程)
DELIMITER ;

call proc5();//调用存储的过程

6.存储过程中的流程控制(case 语句)

DELIMITER //
create procedure proc6()
begin
declare var int default 1;//声明一个int 类型的变量var 默认值为1
case var

//当变量var 为1的时候就输出数据表student 中ID为1的数据
when 1 then select * from student where id =1;

//当变量var 为2的时候就输出数据表student 中ID为2的数据
when 2 then select * from student where id =2;

如果var 即不为1也不为2的时候就输出数据表student中的所有数据
else select * from student ;

end case;//结束case
end // (结束过程)
DELIMITER ;

 7.存储过程中的流程控制(loop 循环语句)

DELIMITER //
create procedure proc7()
begin
declare var int default 1;//声明一个int 类型的变量var 默认值为1

//循环(loop)选择(select)来自数据表student中ID为变量为var的数据
myloop:loop select * from student where id = var;

当变量var>=3的时候就离开这个循环myloop
if var >=3 then leave myloop;

end if;//结束if 条件
set var =var+1;(通过set关键字修改变量值)
end loop;//结束循环
end //
DELIMITER ;

8. 存储过程中的流程控制(repeat 循环语句)

DELIMITER //
create procedure proc8()
begin
declare var int default 1;

//重复(repeat)插入(insert)值(values)(null,'Jack',12,'男')到数据表(student)中
repeat insert student values (null,'Jack',12,'男');
set var = var + 1;(通过set关键字修改变量值)

//直到(until)变量var>=5的时候结束重复插入
until var >= 5 end repeat;
end //
DELIMITER ;

9。存储过程中的流程控制(while 循环语句)

DELIMITER //
create procedure proc9()
begin
declare var int default 1;//声明一个int 类型的变量var 默认值为1

//var 变量小于4
while var <4  

//就插入数据(null,'翠华',18,'女') 到student中
do insert student values (null,'翠华',18,'女');
set var = var +1;

//结束while循环
end while;
end //
DELIMITER ;

10.查看存储过程

show create procedure  proc9;

11.删除数据表中的数据

delete form student where id>5;

列:用过程删除数据

 create procedure proc()

-> begin
-> delete from student where id>5;
-> end //

12.查看存储过程

 show procedure  status  like '%proc';

show create procedure proc9;

13.修改存储过程

只能修改存储过程的特性,不能修改存储过程的代码。(实际开发不常用,)

如果一定要修改,就先删除在新建存储过程。(实际的开发中常用)

14.删除存储过程

drop  procedure (或者 function ) proc9;

15.显示数据表中的所有存储过程

show procedure  status like 'proc%';