Mysql 存储过程注意点

本文详细介绍了MySQL存储过程的编写技巧及注意事项,包括存储过程与数据库的关联、使用delimiter指令更改默认分隔符、参数类型及其作用、局部变量与会话变量的区别、变量赋值方法、过程的创建与修改、条件控制语句的应用、错误处理机制以及光标的使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编写存储过程时,有一些地方值得注意:

1)一个存储过程与特定的数据库相联系~存储过程中不能使用use 'database_name'语句~在调用存储过程时,要么是当前数据库中的存储过程,要么使用db_name.procedure_name来指定~删除数据库时,数据库中的存储过程也一并被删除~

2)在编写一个存储过程前,最好使用delimiter 指令把Mysql的默认分隔符分号'';"改为其他在过程体中不会出现的符号,一般来说会使用delimiter // ~

3)存储过程的参数类型分为三种,IN,OUT,INOUT~~IN型是输入参数,过程体对IN型参数的任何修改在过程体外是无效的,类似于C语言中的传值操作,不会改变值;OUT型是输出参数,过程体中,在未对OUT型参数进行任何修改时,Mysql认为参数值是未确定的,为NULL,在对OUT型参数进行的修改,在过程体外是有效的;INOUT型是输入输出参数,在过程体中可以使用传入的值,过程体中对参数的修改在过程体外也是有效的~

4)过程体中定义的局部变量和会话变量是不同的~对会话变量的使用前面必须要加@符号,且会话变量的作用域是整个会话;过程体可以使用declare语句来定义局部变量,存储过程的参数也被认作是局部变量,对局部变量的使用不能在前加@符号~~

5)过程体中的变量的作用域由begin...end来限定,如果使用了类似begin...begin...end...end的过程体,则内层begin...end中定义的变量在外层中不能识别,外层中定义的变量可以在内层中使用,如果在外层和内层中定义了相同名字的变量,则在内层中,内层变量会取代外层变量~~这和C语言中是类似的

6)可以使用set语句或select..into..来给变量赋值~~可以用select语句来查看变量的值~~无论是局部变量还是会话变量,注意局部变量和会话变量的使用是不同的

7)创建过程使用create procedure,修改过程使用alter procedure,但是对过程的修改,局限于对过程特征的修改,不能对过程体进行修改~删除过程可以使用drop procedure~关于存储过程的修改可参考http://ddguihui.blog.163.com/blog/static/2115808320104124435938/

8)过程体中可以使用各种条件控制语句,例如IF...THEN...ELSE...,CASE...,REPEAT...UNTIL...,WHILE...,LOOP...(设定一个标号)以及在LOOP中的ITERATE(返回到标号处)~

9)过程体中可以使用declare语句来声明条件(为错误状态命名)和对应的错误处理语句,错误处理分为两种,一种是终止(EXIT),另一种是跳过继续(CONTINUE)~在错误发生时,会激活对应的错误处理语句~

10)过程体中可以使用declare语句来声明光标(CURSOR),光标指向select语句返回的结果集的行,是只读的而且不能滚动,只能一行一行的读取,声明光标后,可以使用open来打开光标,close来关闭光标,fetch语句从光标中提取一行赋值给变量,然后光标前进一步,指向下一行~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值