• 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_RESETHAS_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创建的限制的更多相关文章

  1. 在MySQL中创建实现自增的序列(Sequence)的教程

    这篇文章主要介绍了在MySQL中创建实现自增的序列(Sequence)的教程,分别列举了两个实例并简单讨论了一些限制因素,需要的朋友可以参考下 项目应用中,曾有以下一个场景: 接口中要求发送一个int ...

  2. 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...

  3. mysql用户创建触发器权限不足跟参数log_bin_trust_function_creators

    问题描述 有业务反馈当前用户无法创建触发器和存储过程,让用户自己测试,该用户进行对表的增删改查等其他权限没有问题,这边用root用户查证,该用户拥有对当前库的所有权限,但是为什么就是创建不了触发器呢? ...

  4. mysql中创建函数时报错信息

    报错信息如下 ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its ...

  5. MySQL数据库创建视图

    视图可以说是一种虚拟表,建立在基本表的基础上,通过关联一个表或者多个表来获取多个表中需要的字段,视图只是用来查询数据并不能用来存储数据信息. 我有以下几张表: -------image表---- -- ...

  6. Mysql如何创建短索引(前缀索引)

    Mysql如何创建短索引 为什么要用短索引 有时需要索引很长的字符列,它会使索引变大并且变慢.一个策略就是模拟哈希索引.但是有时这也不够好,那么应该怎么办呢?通常可以索引开始的几个字符,而不是全部值, ...

  7. Mysql无法创建外键的原因

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  8. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  9. 转!!!Mysql无法创建外键的原因

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

随机推荐

  1. 好客租房27-state的基本使用

    5.1state的基本使用 状态:数据 是组件内部的私有数据 只能再组件内部使用 state的值是对象 表示一个组件中可以有多个数据 获取数据 this.state //导入react     imp ...

  2. unity---Lighting面板

    打开Lighting面板 将天空盒改为别墅 图片转化为Cube 设置一个材质球

  3. C# settings 文件基础用法

    原文 自定义设置项类型 Serializable 修饰的枚举,可作为设置项类型 [Serializable] public enum DeviceBrand { None = 0, [Descript ...

  4. RabitMQ 简介

    每日一句 The secret of being miserable is to have leisure to bother about whether you are happy or not. ...

  5. 分布式任务调度ScheduleMaster

    1.什么是ScheduleMaster ScheduleMaster是分布式任务调度系统.简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框 ...

  6. 使用 vim 快速对当前文件夹下的文件批量重命名

    前言 我们在使用 Linux 的时候,有很多种方法可以对文件进行重命名,例如 命令行 下的 mv 命令,或者是使用像 dolphin 这样的图形文件管理器.但是有时候需要对一个文件夹下的所有文件批量重 ...

  7. 测试软件稳定性、健壮性之Monkey工具--简洁与深入

    搭建环境这章节没做详细说明,因为我是前期做APP自动化是已经将 SDK 以及JDK给安装配置好了,这次是直接上来演示monkey的功能点以及运用 一.什么是稳定性测试? 通过随机点击屏幕一段时间,看看 ...

  8. JS:!非

    取非运算符: 开关思想:0为false,1为true: 把一个变量中保存一个布尔值 然后在业务执行时,修改这个变量的值: 为取反 然后通过变量的值执行分支业务 例子: var a = "12 ...

  9. VisionPro · C# · 创建项目

    将 VisionPro 引入 C# 项目程序中需要执行以下操作: 1.更改项目程序.NET框架: 2.添加编程引用: 3.添加界面设计控件引用: VisionPro 不同版本对应不同的 .NET 框架 ...

  10. 小样本利器2.文本对抗+半监督 FGSM & VAT & FGM代码实现

    小样本利器2.文本对抗+半监督 FGSM & VAT & FGM代码实现 上一章我们聊了聊通过一致性正则的半监督方案,使用大量的未标注样本来提升小样本模型的泛化能力.这一章我们结合FG ...