MySQL之prepare用法
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可以替代DEALLOCATE Query OK, 0 rows affected (0.00 sec)
每一次执行完EXECUTE时,养成好习惯,须执行DEALLOCATE PREPARE … 语句,这样可以释放执行中使用的所有数据库资源(如游标)。
不仅如此,如果一个session的预处理语句过多,可能会达到max_prepared_stmt_count的上限值。
预处理语句只能在创建者的会话中可以使用,其他会话是无法使用的。
而且在任意方式(正常或非正常)退出会话时,之前定义好的预处理语句将不复存在。
如果在存储过程中使用,如果不在过程中DEALLOCATE掉,在存储过程结束之后,该预处理语句仍然会有效。
转载于:https://www.cnblogs.com/nemowang1996/p/8590669.html
MySQL之prepare用法相关推荐
- mysql prepare命令_MySQL之prepare用法 NemoWang
MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT,习惯称其为[预处理语句],下面是对其详细的介绍. 示例代码 PREPARE stmt_na ...
- mysql PREPARE用法_mysql prepare语句使用
每次都看别人的,今天我自己写下来,以后就不用看别人的了 语法 PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [U ...
- 【MySQL】PREPARE 的应用
简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...
- from用法 prepare_MySQL之prepare用法
MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT,习惯称其为[预处理语句],下面是对其详细的介绍. 示例代码 PREPARE stmt_na ...
- mysql deallocate,MySQL中prepare与execute以及deallocate预处理语句的使用教程
这篇文章主要介绍了MySQL中预处理语句prepare.execute与deallocate的使用教程,需要的朋友可以参考下 MySQL官方将prepare.execute.deallocate统称为 ...
- mysql中Prepare、execute、deallocate的使用方法
mysql中Prepare.execute.deallocate的使用方法 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执 ...
- MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...
- 【node】express中mysql的基本用法、连接池的使用、事务的回滚
[node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...
- Linux下Mysql的查询用法
Linux下Mysql的查询用法 一.Mysql的delete删除语法 1.删除数据库 2.删除数据库的表 二.查询数据 1.基本查询 2.条件查询 三.数据库插入数据 1.创建新表 2.插入数据 四 ...
最新文章
- 实验6-选第K小元素
- CentOS系统安装配置JDK
- centos6安装配置
- 电气备自投笔记书籍介绍(持续更新中)
- Chrome Cookie SameSite 属性设置
- 收购YY直播,百度重返高位的关键布局
- Chome 浏览器,您的连接不是私密连接
- 噪声与振动控制工程手册_轴承噪声种类大全!领取实用轴承手册
- 互联网晚报 | 10月25日 星期一 | 小米15.5亿拿地打造上海总部;恒大将向新能源汽车产业转型;华为运动健康全栈升级...
- react 面试 笔记
- “百度杯”CTF比赛 十月场 writeup
- python 热度图_keras CNN卷积核可视化,热度图教程
- MSP430单片机原理及应用 实验
- 矩阵求导解最小二乘问题
- for循环中的break与continue
- 亚马逊QA是什么意思?
- 相遇3000亿美金之巅,阿里腾讯战力与血值几何?
- 工业4.0下IOT融合技术核心OT节点
- 二维码在线生成api
- 好用的国产无线蓝牙耳机有哪些?盘点好口碑国产蓝牙耳机