mysql创建存储过程意义_浅谈一下mySql中创建存储过程

首先说一下为什么要使用存储过程,存储过程是在数据库中预编译的程序代码,其执行效率显然要比从程序端传过去的sql语句要高的多,这样既可以节省网络带宽,又可以加快sql的执行速度,可以很好的提高系统的性能。缺点是扩展性差,一个存储过程只能实现一个特定的功能,对于千变万化的curd操作来说,每种操作写一个存储过程实在是非常的繁琐,工作量大大加大。所以存储过程最好是应用在复杂且频繁并固定的操作上。

下面是我写的一个比较复杂的存储过程(mySql下的),以此为例浅谈一下我学到的东西。

DELIMITER  //

create procedure findByCity(in basic_City_id char(36), in pageIndex int, in pageLength int)

begin

declare beginNum int default 0;

if pageLength > 0 then

set beginNum = (pageIndex - 1) * pageLength;

select basic_School.*

from basic_School, basic_County, basic_City

where basic_School.fk_County_Id = basic_County.id

and basic_County.fk_City_Id = basic_City.id

and basic_City.id = basic_City_id

order by basic_School.name asc

limit beginNum, pageLength;

else

select basic_School.*

from basic_School, basic_County, basic_City

where basic_School.fk_County_Id = basic_County.id

and basic_County.fk_City_Id = basic_City.id

and basic_City.id = basic_City_id

order by basic_School.name asc;

end if;

end

//

DELIMITER ;

1.首先理解一下这个 DELIMITER  //,这叫声明分隔符,对于mySql中写存储过程必须要用这个进行包裹,否则就会报错。

2.在存储过程的括号里可以添加入参和出参,入参前面加in,出参前面加out,如果返回的是一条数据就不要使用出参了,存储过程会自动返回一条数据。

3.存储过程中可以声明变量如declare beginNum int default 0;但是变量要先声明后赋值如set beginNum = (pageIndex - 1) * pageLength;

4.可以添加排序和分页order by basic_School.name asc  limit beginNum, pageLength;

5.可以使用控制语句如if ... then...else if ...then...else...end if;

6.存储过程中的操作符

算术运算符

+     加   SET var1=2+2;       4

-     减   SET var2=3-2;       1

*     乘   SET var3=3*2;       6

/     除   SET var4=10/3;      3.3333

DIV   整除 SET var5=10 DIV 3;  3

%     取模 SET var6=10%3 ;     1

比较运算符

>            大于 1>2 False

<=           小于等于 2<=2 True

>=           大于等于 3>=2 True

BETWEEN      在两值之间 5 BETWEEN 1 AND 10 True

NOT BETWEEN  不在两值之间 5 NOT BETWEEN 1 AND 10 False

IN           在集合中 5 IN (1,2,3,4) False

NOT IN       不在集合中 5 NOT IN (1,2,3,4) True

=            等于 2=3 False

<>, !=       不等于 2<>3 False

<=>          严格比较两个NULL值是否相等 NULL<=>NULL True

LIKE         简单模式匹配 "Guy Harrison" LIKE "Guy%" True

REGEXP       正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False

IS NULL      为空 0 IS NULL False

IS NOT NULL  不为空 0 IS NOT NULL True

逻辑运算符

与(AND)

XOR

TRUE

FALSE

NULL

TRUE

FALSE

TRUE

NULL

FALSE

TRUE

FALSE

NULL

NULL

NULL

NULL

NULL

位运算符

|   位或

&   位与

<

>>  右移位

~   位非(单目运算,按位取反)

这里只是浅谈一下,具体的问题还要自己根据具体的情况去上网查资料处理,能力有限,望多包涵。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值