千家信息网

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

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章将为大家详细讲解有关MySQL中预处理语句prepare、execute、deallocate怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL
千家信息网最后更新 2024年11月22日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安全错误 数据库的锁怎样保障安全 我国网络安全工作进入快车道 服务器行业标准 路由器dns服务器为什么有2个 服务器安全狗蓝屏 软件开发实施项目合同 工人搬运服务器 sql增量数据库 欢乐世界游戏无服务器 数据库技术及应用专业内容 江苏交友软件开发定制费用 机考网络技术应用考什么 安徽智慧党建软件开发系统 放开那三国3官方服务器 伊宁软件开发的公司 苏美达软件开发工程师待遇 数据库 权限设计 在软件开发实践中常见的技术债务 三层结构采用的网络安全技术 软件开发工程师的生涯感悟 有外来服务器验证失败 海外服务器租用光算云 优势 sql数据库的日志文件存储位置 微信小程序挂数据库 wow台服数据库 兼职 嵌入式软件开发 服务器导轨怎么取下来 中行软件开发中心招聘人数 广东有哪些服务器机柜 网络安全与执法专业国家线 你不可以进指定服务器什么意思
0