千家信息网

MySQL中预处理语句prepare、execute、deallocate怎么用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关MySQL中预处理语句prepare、execute、deallocate怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL
千家信息网最后更新 2026年10月31日MySQL中预处理语句prepare、execute、deallocate怎么用

这篇文章将为大家详细讲解有关MySQL中预处理语句prepare、execute、deallocate怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT。
我习惯称其为【预处理语句】。

其用法十分简单,

  1. PREPARE stmt_name FROM preparable_stmt


  2. EXECUTE stmt_name

  3. [USING @var_name [, @var_name] ...] -


  4. {DEALLOCATE | DROP} PREPARE stmt_name


举个栗子:

  1. mysql> PREPARE pr1 FROM 'SELECT ?+?';

  2. Query OK, 0 rows affected (0.01 sec)

  3. Statement prepared


  4. mysql> SET @a=1, @b=10 ;

  5. Query OK, 0 rows affected (0.00 sec)


  6. mysql> EXECUTE pr1 USING @a, @b;

  7. +------+

  8. | ?+? |

  9. +------+

  10. | 11 |

  11. +------+

  12. 1 row in set (0.00 sec)


  13. mysql> EXECUTE pr1 USING 1, 2; -- 只能使用用户变量传递。

  14. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the

  15. right syntax to use near '1, 2' at line 1


  16. mysql> DEALLOCATE PREPARE pr1;

  17. Query OK, 0 rows affected (0.00 sec)


使用PAREPARE STATEMENT可以减少每次执行SQL的语法分析,
比如用于执行带有WHERE条件的SELECT和DELETE,或者UPDATE,或者INSERT,只需要每次修改变量值即可。
同样可以防止SQL注入,参数值可以包含转义符和定界符。

适用在应用程序中,或者SQL脚本中均可。

更多用法:

同样PREPARE ... FROM可以直接接用户变量:

  1. mysql> CREATE TABLE a (a int);

  2. Query OK, 0 rows affected (0.26 sec)


  3. mysql> INSERT INTO a SELECT 1;

  4. Query OK, 1 row affected (0.04 sec)

  5. Records: 1 Duplicates: 0 Warnings: 0


  6. mysql> INSERT INTO a SELECT 2;

  7. Query OK, 1 row affected (0.04 sec)

  8. Records: 1 Duplicates: 0 Warnings: 0


  9. mysql> INSERT INTO a SELECT 3;

  10. Query OK, 1 row affected (0.04 sec)

  11. Records: 1 Duplicates: 0 Warnings: 0


  12. mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);

  13. Query OK, 0 rows affected (0.00 sec)


  14. mysql> SET @table_name = 'a';

  15. Query OK, 0 rows affected (0.00 sec)


  16. mysql> PREPARE pr2 FROM @select_test;

  17. Query OK, 0 rows affected (0.00 sec)

  18. Statement prepared


  19. mysql> EXECUTE pr2 ;

  20. +------+

  21. | a |

  22. +------+

  23. | 1 |

  24. | 2 |

  25. | 3 |

  26. +------+

  27. 3 rows in set (0.00 sec)


  28. mysql> DROP PREPARE pr2; -- 此处DROP可以替代DEALLOCATE

  29. Query OK, 0 rows affected (0.00 sec)


每一次执行完EXECUTE时,养成好习惯,须执行DEALLOCATE PREPARE … 语句,这样可以释放执行中使用的所有数据库资源(如游标)。
不仅如此,如果一个session的预处理语句过多,可能会达到max_prepared_stmt_count的上限值。

预处理语句只能在创建者的会话中可以使用,其他会话是无法使用的。
而且在任意方式(正常或非正常)退出会话时,之前定义好的预处理语句将不复存在。
如果在存储过程中使用,如果不在过程中DEALLOCATE掉,在存储过程结束之后,该预处理语句仍然会有效。

关于"MySQL中预处理语句prepare、execute、deallocate怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

语句 预处理 更多 篇文章 过程 变量 用户 存储 不错 实用 有效 不仅如此 不复存在 内容 创建者 参数 官方 定界符 应用程序 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 互联网科技公司排名 重庆互联网络科技 金融科技与互联网金融 成都互联网科技公司 西安互联网科技公司 猫创互联网科技 全球顶尖互联网科技公司 武汉健翔互联网络科技有限公司 互联网与医疗科技 宜昌元轩互联网科技有限公司 成都互联网科技公司工作好不好 恒生互联网科技指数跳水 亳州好赞互联网科技有限公司 启辰互联网科技 杭州披云加互联网科技有限公司 昆明中奇联合互联网科技 中国新注册互联网科技 互联网科技大会大佬 如何强化互联网金融科技 北京路客互联网科技有限公司 互联网科技金融 菲比寻常互联网科技 互联网科技生活的内容 中盈科技互联网信息有限公司 苏州铭阳互联网科技有限公司 工业互联网山东科技大学 山东子淼互联网科技有限公司 伍佰万互联网科技是干嘛的 互联网科技企业文化
0