关于MySQL function创建的限制
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
MySQL 的function创建会有各种限制,经常使用的语句的限制如下:
1、CONTAINS_DYNAMIC_SQL
CREATE function f1() returns int
BEGIN
set @cmd = 'select * from t1';
PREPARE stmt1 FROM @cmd;
EXECUTE IMMEDIATE @cmd;
return 1;
END;
SQL Error [1336] [0A000]: Dynamic SQL is not allowed in stored function or trigger
如果在function创建的时候包含PREPARE,EXECUTE, DEALLOCATE,那么这些都会被判断为包含DYNAMIC SQL,这些语法都会被拒绝。因为使用存储过程的目的是防止使用严格类型的数据进行SQL注入。这个例子里面的sql语句是固定的,已经脱离了prepare的使用意义,因此不需要创建这种场景。。
2、MULTI_RESULTS
CREATE function f1() returns int
BEGIN
select * from tb_tmp;
return 1;
END;
SQL Error [1415] [0A000]: Not allowed to return a result set from a function
这里select语句会返回多行结果,而function只能允许返回一个固定结果,因此这种情况也不允许。
3、HAS_COMMIT_OR_ROLLBACK
CREATE function f1() returns int
BEGIN
commit;
return 1;
END;
SQL Error [1422] [HY000]: Explicit or implicit commit is not allowed in stored function or trigger.
因为在procedure的set x=fi()的场景里面,一个set语句包含了begin work和commit work,如果f1有commit的话会影响事务后面的管理。
4、其他情况
除了以上情况还有另外2种也会被拒绝:分别是 HAS_SQLCOM_RESET
、HAS_SQLCOM_FLUSH
。使用时候注意避开。
5、补充说明
在procedure中一条包含begin和commit的语句除了上面提到的set,还有IF, CASE, DECLARE, RETURN,这些命令创建时候都会设置open_tables=true,然后执行open_and_lock_tables,当执行完子命令再进行rollback或者commit操作。
Enjoy GreatSQL
深入浅出MGR专栏
1.MGR简介 | 深入浅出MGR
https://mp.weixin.qq.com/s/lbU5KaY2hEPq4gnwJ8PgCg
2.组复制技术架构 | 深入浅出MGR
https://mp.weixin.qq.com/s/6__H3-HFsBtZk336EaAcrQ
3.安装部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/Nh37KuBQZ137BpmqG26_OQ
4.利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/51ESDPgeuXqsgib6wb87iQ
5.MGR管理维护 | 深入浅出MGR
https://mp.weixin.qq.com/s/D5obkekTClZEdN2KQ9xiXg
文章推荐:
MySQL主从复制原理及搭建过程
https://mp.weixin.qq.com/s/X2k2oOROZOAdVql4SeoO3Q
MySQL主从复制之GTID模式介绍
https://mp.weixin.qq.com/s/9gzGmFKyjxTgkWtBpetl2A
MySQL主从复制之半同步(semi-sync replication)
https://mp.weixin.qq.com/s/BhQgCcoOgC6sEgzxux858w
Linux环境监控工具汇总
https://mp.weixin.qq.com/s/SYFR3VnSl4zMGfMix_6Dig
MySQL Test Run 测试框架介绍
https://mp.weixin.qq.com/s/JA5hfaZuRMPFa7LmLUvfbQ
关于 GreatSQL
GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/GreatSQL
GitHub:
https://github.com/GreatSQL/GreatSQL
Bilibili:
https://space.bilibili.com/1363850082/video
微信&QQ群:
可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群
QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 发布!
关于MySQL function创建的限制的更多相关文章
- 在MySQL中创建实现自增的序列(Sequence)的教程
这篇文章主要介绍了在MySQL中创建实现自增的序列(Sequence)的教程,分别列举了两个实例并简单讨论了一些限制因素,需要的朋友可以参考下 项目应用中,曾有以下一个场景: 接口中要求发送一个int ...
- 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...
- mysql用户创建触发器权限不足跟参数log_bin_trust_function_creators
问题描述 有业务反馈当前用户无法创建触发器和存储过程,让用户自己测试,该用户进行对表的增删改查等其他权限没有问题,这边用root用户查证,该用户拥有对当前库的所有权限,但是为什么就是创建不了触发器呢? ...
- mysql中创建函数时报错信息
报错信息如下 ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its ...
- MySQL数据库创建视图
视图可以说是一种虚拟表,建立在基本表的基础上,通过关联一个表或者多个表来获取多个表中需要的字段,视图只是用来查询数据并不能用来存储数据信息. 我有以下几张表: -------image表---- -- ...
- Mysql如何创建短索引(前缀索引)
Mysql如何创建短索引 为什么要用短索引 有时需要索引很长的字符列,它会使索引变大并且变慢.一个策略就是模拟哈希索引.但是有时这也不够好,那么应该怎么办呢?通常可以索引开始的几个字符,而不是全部值, ...
- Mysql无法创建外键的原因
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
- java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结
2016-09-0111:06:53 使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...
- 转!!!Mysql无法创建外键的原因
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
随机推荐
- Spring Security之简单举例
核心功能 Spring Security提供了三个核心的功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 一个简单例子 默认情况 在前面的开发中,都是将spring securit ...
- Node.js的多版本管理工具 gnvm(win环境)的详细安装教程(图解步骤、通俗易懂、亲测有效)
前言 本篇随笔主要写了如何安装并使用node多版本管理工具gnvm(windowns环境下) 作为自己对多版本工具gnvm知识的总结与笔记. 百度云盘gnvm应用程序包 获取链接(个人应用地址如下): ...
- 技术管理进阶——空降Leader如何开展工作?
原创不易,求分享.求一键三连 前几天有个粉丝咨询了一个的问题: 最近遇到一个空降Leader,挺苦恼的: 新Leader技术很厉害,但平时根本就不管我们,也不愿意了解业务,更像是一个技术顾问. 具体案 ...
- 制造企业信息化时代,SaaS系统下沉,移动端上升
这个时代,我们是不是有很多岗位一定是要在电脑前面完成?如果我们让部分岗位的办公室人员离开电脑,让他们通过移动端来完成工作,这又会产生出一个什么样的变化?是否意味着可以有更多的时间在一线生产制造现场,从 ...
- MySQL数据库3
内容概要 自增特性 约束条件之外键 外键简介 外键关系 外键SQL语句之一对多关系 外键SQL语句之多对多关系 外键SQL语句之一对一关系 查询关键字 数据准备 查询关键字之select与from 查 ...
- 【抬杠.NET】如何进行IL代码的开发(续)
背景 之前写了一篇文 [抬杠.NET]如何进行IL代码的开发 介绍了几种IL代码的开发方式. 创建IL项目 C#项目混合编译IL 使用InlineIL.Fody 使用DynamicMethod(ILG ...
- Java系列之运算符
运算符 算术运算符:+ (加).-(减) .*(乘)./(除).%(模).++(自增) . --(自减) 赋值运算符:= 关系运算符:>.<.>= <= == != insta ...
- vscode远程调试c++
0.背景 最近在学习linux webserver开发,需要在linux下调试自己的C/C++代码,但是linux下不像在windows下,直接Visio Studio或者其它集成开发环境那么方便,现 ...
- easyui combobox重复渲染问题
当一个页面有两个easyui combobox存在时,并且同时给两个combobox赋相同值,某些easyui的版本会导致其中一个无法切换选项. 解决办法,分两步赋值,可解决问题
- (数据科学学习手札139)geopandas 0.11版本重要新特性一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...