mysql支持3条用来创建循环的语句_MySql学习笔记——存储过程

今天复习了一下mysql的一些知识,之前学习的时候是看视频,但是没有做什么笔记,所以现在通过看书把以前学习的回顾一下,加深一下印象。

存储过程定义

简单的来说,可以定义一段程序放在数据库中,这样的程序称为存储过程,它是最重要的数据库对象之一。存储过程实质上就是一段代码,可以由声明式SQL语句(如create,update和select等)和过程式SQL语句(如if-then-else)组成。

存储过程的优点

存储过程在服务器端运行,执行速度快。

存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需要从高速缓冲存储器中调用已编译好二进制代码执行,提高系统性能。

确保数据安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。

存储过程的创建、调用、删除和修改

1.创建存储过程

语法:

create procedure sp_name ([proc_parameter[,....]])

[characteristic...] routine_body

其中,proc_parameter的参数如下:

[ in | out | inout] param_name type

说明:

sp_name: 存储过程的名称,默认在当前数据库中创建。若要在特定的数据库中创建,要在名称前面加上数据库的名称,格式为:db_name.sp_name。名称要尽量避免与MYSQL的内置函数相同,否则会发生错误。

proc_parameter:存储过程的参数。

param_name为参数名,

type为参数的类型,有多个参数时用逗号隔开。MySql的存储过程支持三种类型的参数:输入参数、输出参数和输入/输出参数,关键字分别是IN、OUT和INOUT。输入参数使数据可以传递给一个存储过程。当需要一个答案或结果的时候,可以使用输出参数。输入输出两者都可以充当。

例子:

delimiter $$

create PROCEDURE delete_user(in us int(10))

begin

DECLARE num int(4);

set num = us - 1;

delete from user where id = us;

end $$

delimiter;

其中delimiter $$是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“#”,两个“¥”等。使用delimiter命令时,应该尽量避免使用反斜杠(“/”)字符,因为那是Mysql的转义字符。

过程体

在存储过程体中可以使用所有的sql语句类型,包括所有的DDL、DCL和DML语句。

1.局部变量

语法:

declare var_name[,...] type [default value]

例子:

declare num int(4);

declare str,str2 varchar(6);

局部变量和用户变量的区别在于:局部变量前面没有使用@符号,局部变量在其所在的begin..end语句块处理完就消失了,而用户变量存在于整个会话当中。

2.使用SET语句赋值

要给局部变量赋值可以使用SET语句。语法如下

SET var_name = expr [,var_name = expr]……

set num = 1, str = 'hello';

3.select...into语句

使用这个语句可以把选定的列值直接存储到变量中。因此返回的结果只能有一行。

语法:

select col_name[,...] into var_name[,...] table_expr

说明:

col_name是列名。

var_name是要赋值的变量名。

table_expr是select语句中的from子句及后面的部分。

该语句只能在存储过程体中使用。

4.流程控制语句

在MySql中,常见的过程式SQL语句可以用在一个存储过程体中。如:IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句

IF语句

IF-THEN-ELSE语句可以根据不同的条件执行不同的操作。

语法:

IF search_condition THEN statement_list

[ELSEIF search_condition THEN statement_list]...

[ELSE statement_list]

END IF

说明:

search_condition是判断条件。

statement_list中包含一个或多个sql语句。当search_condition的条件为真时,就执行相应的sql语句。

例子:

delimiter $$

create procedure compar(in k1 integer, in k2 integer, out k3 char(6))

BEGIN

if k1>k2 THEN

set k3 = '大于';

elseif k1=k2 then

set k3 = '等于';

else

set k3 = '小于';

end if;

end $$

delimiter;

CASE语句

语法:

CASE case_value

WHEN when_value THEN statement_list

[ WHEN when_value THEN statement_list]...

[ ELSE statement_list]

END CASE

一个case语句经常可以充当一个IF-THEN-ELSE语句。

例子:

delimiter $$

create procedure abc(in str varchar(4), out sex varchar(4))

begin

case str

when 'm' then set sex = '男';

when 'f' then set sex = '女';

else set sex = '无';

end case;

end $$

delimiter ;

循环语句

MySql支持3条用来创建循环的语句:WHILE、REPEAT和LOOP语句,在存储过程中可以定义0个、1个或多个循环语句。

WHILE语句语法为:

[begin_label: ]

WHILE search_condition DO

statement_list

END WHILE [end_label]

说明:理解这些语句可以通过java中的知识理解。

例子:

delimiter $$

create procedure dowhile()

begin

declare v1 in default 5;

while v1 > 0 do

set v1 = v1-1;

end while;

end $$

delimiter ;

REPEAT语句语法如下:

[begin_label: ]

REPEAT

statement_list

UNTIL search_condition

END REPEAT [end_label]

说明:REPEAT语句首先执行statement_list中的语句,然后判断search_condition是否为真,为真则停止循环,不为真则继续循环。

例子:

repeat

v1=v1-1;

until v1<1;

end repeat;

repeat和while语句的区别在于:REPEAT先执行语句,后进行判断;而WHILE是先判断条件为真时才执行语句。

LOOP语句语法如下:

[begin_label: ]

LOOP

statement_list

END LOOP [end_label]

说明:LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造,statement_list是需要重复执行的语句。在循环体内的语句一直重复至循环被退出,退出时通常伴随着一个LEAVE语句。

LEAVE语句经常和BEGIN...END或循环一起使用,结构如下:

LEAVE label

例子:

delimiter $$

create procedure doloop()

begin

set @a=10;

label: loop

set @a=@a-1;

if @a<0 then

leave label;

end if;

end loop label;

end $$

delimiter ;

存储过程的调用

语法:

call sp_name([parameter[,...]])

例子:判断两个数的大小

delimiter $$

create procedure compar(in k1 integer, in k2 integer, out k3 char(6))

BEGIN

if k1>k2 THEN

set k3 = '大于';

elseif k1=k2 then

set k3 = '等于';

else

set k3 = '小于';

end if;

end $$

delimiter;

call compar(4,4,@k3);

select @k3;

结果

9e96578b995f61d91382838853e7d2e9.png

存储过程的删除

语法:

drop procedure [if exists] sp_name

例子:

drop procedure if exists compar;

存储过程的修改

修改存储过程可以用alter procedure语句。

语法:

alter procedure sp_name[characteristic...] 其中characteristic是存储过程创建时特征。

小结

主要把存储过程定义,创建、调用、修改和删除简单回顾一下,这块知识还是很重要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值