Chinaunix首页 | 论坛 | 博客
  • 博客访问: 797746
  • 博文数量: 127
  • 博客积分: 3662
  • 博客等级: 中校
  • 技术积分: 1371
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-02 12:36
个人简介

Linux&MySQL&PHP&Nginx&Apache&MSSQL&Shell

文章分类

全部博文(127)

文章存档

2016年(1)

2015年(8)

2014年(14)

2013年(26)

2012年(17)

2011年(28)

2010年(33)

分类: Mysql/postgreSQL

2013-11-13 16:59:56


点击(此处)折叠或打开

  1. CREATE
  2.     /*[DEFINER = { user | CURRENT_USER }]*/
  3.     FUNCTION `test`.`a`()
  4.     RETURNS TYPE
  5.     /*LANGUAGE SQL
  6.     | [NOT] DETERMINISTIC
  7.     | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  8.     | SQL SECURITY { DEFINER | INVOKER }
  9.     | COMMENT 'string'*/
  10.     BEGIN
  11.          RETURN ;
  12.     END$$
  13. 这篇博文的目的就是为了解说这段创建function的语法参数!


  14. /* */这样的注释是类c注释,相信大部分语言里面都有!


  15. [DEFINER = { USER | CURRENT_USER }]:定义创建者,可以手动指定数据库中已经存在的用户,或者默认(使用当前用户).


  16. RETURNS TYPE:返回类型,就是mysql里面所支持的所有列类型


  17. [NOT] DETERMINISTIC:这个是用于binlog和主从复制等!DETERMINISTIC是确定的,意思就是写入binlog的时候,写入的是一个指定的常量;如unix_timestamp()获取到的值是1,可能写入binlog的时候,unix_timestamp()获取到的时间戳却成了3了,这个时候会出现数据不一致问题,所以引入了DETERMINISTIC!这是binlog安全的一种机制!一般情况下,NOT DETERMINISTIC不允许使用,会报如下错误:
  18. Error CODE : 1418
  19. This FUNCTION has NONE of DETERMINISTIC, NO SQL, OR READS SQL DATA IN its declaration AND BINARY logging IS enabled (you *might* want TO USE the LESS safe log_bin_trust_function_creators variable)
  20. 可以从报错内容里面发现,设置log_bin_trust_function_creators函数就可以使用NOT DETERMINISTIC,但是二进制安全性极差!
  21. CONTAINS SQL表示子程序不包含读或写数据的语句;
  22. NO SQL表示子程序不包含SQL语句。
  23. READS SQL DATA表示子程序包含读数据的语句,但不包含写数据的语句。
  24. MODIFIES SQL DATA表示子程序包含写数据的语句。
  25. 如果这些特征没有明确给定,默认的是CONTAINS SQL


  26. SQL SECURITY { DEFINER | INVOKER};就是执行时的权限检查;如果一个函数定义为访问a表中的记录!这个时候就有权限检查。DEFINER就是以创建者的权限去检查,INVOKER是以执行者的权限去检查!
  27. 如果用户u1去调用函数f去访问a的记录(此处的DEFINER定义为u2)!当为DEFINER的时候,mysql会检查u1是否有execute函数f的权限,如果有,继续看定义者u2是否有访问a记录的权限;[u1是执行者,u2是定义者]
  28. 同理:当为INVOKER的时候,mysql会检查u1是否有execute函数f的权限,如果有,继续看u1是否有访问a记录的权限
  29.  
  30. COMMENT 'string':注释
  31. 具体参考mysql5.1参考手册第20章存储过程和函数!
转载:http://qdjalone.blog.51cto.com/1222376/884647

阅读(7266) | 评论(0) | 转发(0) |
1

上一篇:MySQL导入MSSQL

下一篇:MySQL INT数值型类型

给主人留下些什么吧!~~