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用法相关推荐

  1. mysql prepare命令_MySQL之prepare用法 NemoWang

    MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT,习惯称其为[预处理语句],下面是对其详细的介绍. 示例代码 PREPARE stmt_na ...

  2. mysql PREPARE用法_mysql prepare语句使用

    每次都看别人的,今天我自己写下来,以后就不用看别人的了 语法 PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [U ...

  3. 【MySQL】PREPARE 的应用

    简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...

  4. from用法 prepare_MySQL之prepare用法

    MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT,习惯称其为[预处理语句],下面是对其详细的介绍. 示例代码 PREPARE stmt_na ...

  5. mysql deallocate,MySQL中prepare与execute以及deallocate预处理语句的使用教程

    这篇文章主要介绍了MySQL中预处理语句prepare.execute与deallocate的使用教程,需要的朋友可以参考下 MySQL官方将prepare.execute.deallocate统称为 ...

  6. mysql中Prepare、execute、deallocate的使用方法

    mysql中Prepare.execute.deallocate的使用方法 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执 ...

  7. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  8. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

  9. Linux下Mysql的查询用法

    Linux下Mysql的查询用法 一.Mysql的delete删除语法 1.删除数据库 2.删除数据库的表 二.查询数据 1.基本查询 2.条件查询 三.数据库插入数据 1.创建新表 2.插入数据 四 ...

最新文章

  1. 实验6-选第K小元素
  2. CentOS系统安装配置JDK
  3. centos6安装配置
  4. 电气备自投笔记书籍介绍(持续更新中)
  5. Chrome Cookie SameSite 属性设置
  6. 收购YY直播,百度重返高位的关键布局
  7. Chome 浏览器,您的连接不是私密连接
  8. 噪声与振动控制工程手册_轴承噪声种类大全!领取实用轴承手册
  9. 互联网晚报 | 10月25日 星期一 | 小米15.5亿拿地打造上海总部;恒大将向新能源汽车产业转型;华为运动健康全栈升级...
  10. react 面试 笔记
  11. “百度杯”CTF比赛 十月场 writeup
  12. python 热度图_keras CNN卷积核可视化,热度图教程
  13. MSP430单片机原理及应用 实验
  14. 矩阵求导解最小二乘问题
  15. for循环中的break与continue
  16. 亚马逊QA是什么意思?
  17. 相遇3000亿美金之巅,阿里腾讯战力与血值几何?
  18. 工业4.0下IOT融合技术核心OT节点
  19. 二维码在线生成api
  20. 好用的国产无线蓝牙耳机有哪些?盘点好口碑国产蓝牙耳机

热门文章

  1. 服务器端控件TextBox 设为只读属性后无法获取javascript给其赋的值
  2. 怎样查看qq好友的ip
  3. 为数字经济培育土壤:华为存储让天下没有难做的IT解决方案
  4. 如何使用监控诊断工具Arthas(阿尔萨斯)
  5. 基于html5的音乐网站,基于C#和HTML5的在线音乐网站设计
  6. 精致的动画特效源代码
  7. 您的输出设备不支持HDCP
  8. 生活需要仪式感,欧蓝德幸福照相馆带你发现身边的幸福
  9. 盛大陈天桥回首创业路:半夜醒来一身冷汗
  10. 网页设计与制作主页模板