MySQL中prepare、execute与deallocate怎么用
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要介绍MySQL中prepare、execute与deallocate怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言MySQL官方将prepare、exec
千家信息网最后更新 2025年02月23日MySQL中prepare、execute与deallocate怎么用
这篇文章主要介绍MySQL中prepare、execute与deallocate怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
前言
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT,我习惯称其为【预处理语句】,其用法十分简单,下面话不多说,来一起看看详细的介绍吧。
示例代码
PREPARE stmt_name FROM preparable_stmtEXECUTE stmt_name [USING @var_name [, @var_name] ...] -{DEALLOCATE | DROP} PREPARE stmt_name
举个栗子:
mysql> PREPARE pr1 FROM 'SELECT ?+?';Query OK, 0 rows affected (0.01 sec)Statement preparedmysql> SET @a=1, @b=10 ;Query OK, 0 rows affected (0.00 sec)mysql> EXECUTE pr1 USING @a, @b;+------+| ?+? |+------+| 11 |+------+1 row in set (0.00 sec)mysql> EXECUTE pr1 USING 1, 2; -- 只能使用用户变量传递。ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 2' at line 1mysql> DEALLOCATE PREPARE pr1;Query OK, 0 rows affected (0.00 sec)
使用PAREPARE STATEMENT可以减少每次执行SQL的语法分析,比如用于执行带有WHERE条件的SELECT和DELETE,或者UPDATE,或者INSERT,只需要每次修改变量值即可。
同样可以防止SQL注入,参数值可以包含转义符和定界符。
适用在应用程序中,或者SQL脚本中均可。
更多用法:
同样PREPARE ... FROM可以直接接用户变量:
mysql> CREATE TABLE a (a int);Query OK, 0 rows affected (0.26 sec)mysql> INSERT INTO a SELECT 1;Query OK, 1 row affected (0.04 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> INSERT INTO a SELECT 2;Query OK, 1 row affected (0.04 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> INSERT INTO a SELECT 3;Query OK, 1 row affected (0.04 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);Query OK, 0 rows affected (0.00 sec)mysql> SET @table_name = 'a';Query OK, 0 rows affected (0.00 sec)mysql> PREPARE pr2 FROM @select_test;Query OK, 0 rows affected (0.00 sec)Statement preparedmysql> EXECUTE pr2 ;+------+| a |+------+| 1 || 2 || 3 |+------+3 rows in set (0.00 sec)mysql> DROP PREPARE pr2; -- 此处DROP可以替代DEALLOCATEQuery OK, 0 rows affected (0.00 sec)
每一次执行完EXECUTE时,养成好习惯,须执行DEALLOCATE PREPARE … 语句,这样可以释放执行中使用的所有数据库资源(如游标)。
不仅如此,如果一个session的预处理语句过多,可能会达到max_prepared_stmt_count的上限值。
预处理语句只能在创建者的会话中可以使用,其他会话是无法使用的。
而且在任意方式(正常或非正常)退出会话时,之前定义好的预处理语句将不复存在。
如果在存储过程中使用,如果不在过程中DEALLOCATE掉,在存储过程结束之后,该预处理语句仍然会有效。
以上是MySQL中prepare、execute与deallocate怎么用的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
语句
预处理
过程
内容
变量
更多
用户
存储
有效
不仅如此
不复存在
代码
价值
兴趣
创建者
前言
参数
官方
定界符
小伙
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术和网络安全的区别
浏览代理服务器硬件
物流建立基础数据库
怎么修改服务器地址
214网络安全事件是哪家医院
我的世界服务器飞天船
商品销售数据库表
ecs使用中服务器换操作系统
网络安全我是安全小能手手抄报
广西政府数据库国产
网络技术发展的几个阶段
海南通用软件开发服务电话
服务器跟空间的区别
传奇4国际服是一个服务器吗
fm2017.34数据库
太仓提供网络技术服务电话
网络技术评分标准
软件开发时期包含哪些阶段
阿里云数据库同步规则
用友出纳月结数据库表灰的
oracle数据库解锁
想学点网络安全方面的知识
易语言连接腾讯云数据库
地方工业网络安全防护
服务器 连接 局域网
合肥诺博源软件开发公司
广东交友软件开发定制
数据库课后习题第三章
头条软件开发工程师工作两年后
天下双平台服务器