MySQL存储过程的特性_MySQL存储过程之特征子句

CREATE PROCEDUREp2 ()

LANGUAGE SQLNOTDETERMINISTIC

SQL SECURITY DEFINER

COMMENT'A Procedure'

SELECT CURRENT_DATE, RAND() FROM t //

以上括号之后,主体之前的内容是反映存储过程特性的子句,下面分别介绍各自的作用:

1. LANGUAGE SQL:

这个子句是没有功能作用的,仅仅是说明下面过程体中所使用的是SQL语言编写.这也是系统默认的.默认不代表完全可省略,因为某些DBMS需要它,如果要考虑IBM的DB2的兼容性可以写上,此外,今后可能会出现SQL外的其他语言支持的存储过程.

2. NOT DETERMINISTIC:

传递给系统的信息,即不确定的.如果一个存储过程每次调用只要参数一样,输出也一样,即为确定的.本例中的主体语句为SELECT语句,则返回值肯定是未知的,因此,此处为NOT DETERMINISTIC.MySQL内置的优化程序不会注意这些,至少现在不注意.

3. SQL SECURITY DEFINER:

指定权限控制,指定在调用时如何认定调用方的权限:DEFINER表示不管调用方是谁,都拥有定义者的权限,INVOKER表示仅按调用方本身的权限调用.

4. COMMENT 'a procedure...':

存储过程的注释说明文本.默认值为空('').

以上列出的子句都是默认设置,所以如果所有子句省略则相当于:(RAND()返回随机数)

CREATE PROCEDUREp2 ()SELECT CURRENT_DATE, RAND() FROM t //#相当于:CREATE PROCEDUREp2 ()

LANGUAGE SQLNOTDETERMINISTIC

SQL SECURITY DEFINER

COMMENT''

SELECT CURRENT_DATE, RAND() FROM t //

5. 补充说明:

不会改变的sql_mode,先看以下代码段:

mysql> set sql_mode='ansi' //mysql> create procedure p3()select'a'||'b'//mysql> set sql_mode=''//mysql> call p3()//

MySQL在过程创建时会自动保持当时的运行环境,如上例,如果需要用||来连接字符串,但这只能在sql_mode为ansi时才有效,可以在创建过程之前更改sql_mode,过程创建完成后就算更改的sql_mode,也不会影响以后调用该过程.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值