前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 8.0 终于拥有了prepare 功能

MYSQL 8.0 终于拥有了prepare 功能

作者头像
AustinDatabases
发布2021-10-14 16:20:59
9320
发布2021-10-14 16:20:59
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

MYSQL 8.022 有了prepare 功能,prepare 功能是ORACLE 和 PG 都拥有和在很多应用场景都使用的功能。主要的作用为

1 在SQL 语句中可以通过变量将值传递给语句

2 执行计划在变量为赋值前就已经做好

3 执行计划在prepare 后执行计划就固定了

总结prepare的主要作用:

减少每次执行语句时解析语句的开销。在数据库应用程序处理大量相同的语句,仅仅对子句条件变量值进行更改,同时可以防止SQL 注入满足部分安全功能。这个功能本身在PG 以及ORACLE 等数据库都有满足。MYSQL 属于弥补之前功能的不足。

MYSQL 提供了客户端编程接口可以使用包括 C ,Java, NET 等程序的接口在程序中调用相关的函数来使用预编译API语句的功能。

在MYSQL 内部进行的语法如下

prepare sql from preparable_stmt

通过这个语法来声明,这里声明的prepare 语句必须是单语句,不能是复合语句,在声明时也只能对变量进行声明,不能对语句中的字段以及表进行变量的绑定。在声明时如果重复声明则会导致前面的声明被deallocated,注销掉。在声明prepare后,在使用中如果连接断掉,则prepare的声明立即失效,声明语句的变量的类型也会在第一次申请时进行固化,不能在使用中变化。

下面是简单使用prepare 设置变量以及执行变量的语句

除了访问的session 断掉后,可以立即释放prepare的资源,手动的通过 deallocate 命令也可以释放prepare的资源。

DEALLOCATE PREPARE st;

在网上也有类似关于prepare 方面的的问题, 如下,下面的问题是咨询在mysql中 使用prepare 功能是否可以将变量设置为表名。

实际上这个问题是有问题,忽略了prepare本身的设置这个功能的用意,preare功能本身主要的要点是节省 execute plan 的时间,通过一次prepare来让后面执行的语句全部用同一种执行计划, 而如果将变量设置为表名的话,那么这个功能的意义在哪里,每次还是必须要进行执行计划的初始,这就丧失了prepare的整体意义,属于没有理解这个功能的意义。

mysql 在8.0 提出的新的prepare功能本身是基于其他数据库已有的功能进行的功能补充和添加,为拉平MYSQL与其他主流数据库在这方面的功能短板,不过也说明MYSQL 正在变得越来越好。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档