关于mysql:关于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_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/lb…

2.组复制技术架构 | 深入浅出MGR
https://mp.weixin.qq.com/s/6_…

3.装置部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/Nh…

4.利用MySQL Shell装置部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/51…

5.MGR治理保护 | 深入浅出MGR
https://mp.weixin.qq.com/s/D5…

文章举荐:

MySQL主从复制原理及搭建过程
https://mp.weixin.qq.com/s/X2…

MySQL主从复制之GTID模式介绍
https://mp.weixin.qq.com/s/9g…

MySQL主从复制之半同步(semi-sync replication)
https://mp.weixin.qq.com/s/Bh…

Linux环境监控工具汇总
https://mp.weixin.qq.com/s/SY…

MySQL Test Run 测试框架介绍
https://mp.weixin.qq.com/s/JA…

对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

Bilibili:
https://space.bilibili.com/13…

微信&QQ群:
可搜寻增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群

QQ群:533341697
微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理