MySql函数(精)

http://www.cnblogs.com/dreamhome/archive/2012/10/25/2738453.html

DELIMITER $$


DROP FUNCTION IF EXISTS test_fun1$$


CREATE FUNCTION test_fun1 (df1 INT) RETURNS VARCHAR(20)
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '这是函数的描述'


BEGIN
SET df1 = 13;
INSERT INTO testtable1(NAME)VALUES('li');
SELECT COUNT(*) INTO @cun FROM testtable1;
RETURN @cun+"";


END$$




DELIMITER ;




SET @df1 = 12;
SET @df2 = test_fun1(@df1);
SELECT @df1,@df2,@cun;


/*


REATE FUNCTION 方法名 (参数1 类型,参数2 类型,...) RETURNS 返回数据类型
[[NOT] DETERMINISTIC]
[CONTAINS SQL/NO SQL/READS SQL DATA/MODIFIES SQL DATA]
[SQL SECURITY DEFINER/INVOKER ]
[COMMENT '函数说明']
BEGIN
函数体..;


RETURN 数据;
END




方法的参数没有OUT,INOUT类型,一律IN类型




DETERMINISTIC会把返回结果高速缓存,每次调用函数如果输入参数相同则返回的是高速缓存的结果
NOT DETERMINISTIC相反不高速缓存,每次重新求值返回结果
默认是NOT DETERMINISTIC
通常要明确为DETERMINISTIC或者标注为NO SQL否则会报错


一些特征提供方法使用数据的内在信息。
CONTAINS SQL表示方法不包含读或写数据的语句。
NO SQL表示方法不包含SQL语句。
READS SQL DATA表示方法包含读数据的语句,但不包含写数据的语句。
MODIFIES SQL DATA表示方法包含写数据的语句。如果这些特征没有明确给定。
默认的是CONTAINS SQL。


SQL SECURITY特征可以用来指定 方法该用创建方法者的许可来执行,还是使用调用者的许可来执行。默认值是DEFINER。
在SQL:2003中者是一个新特性。创建者或调用者必须由访问方法关联的数据库的许可。在MySQL 5.1中,必须有EXECUTE权限才能执行方法。
必须拥有这个权限的用户要么是定义者,要么是调用者,这取决于SQL SECURITY特征是如何设置的。


MySQL存储sql_mode系统变量设置,这个设置在方法被创建的时候起作用,MySQL总是强制使用这个设置来执行方法。


COMMENT子句是一个MySQL的扩展,它可以被用来描述 存储程序。这个信息被SHOW CREATE PROCEDURE和 SHOW CREATE FUNCTION语句来显示。
*/


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值