写过java,rails,php等的同学都知道,mysql在执行中有一个占位符的sql,比如rails里:

ModelTest.where("id = ?", 100)

但是在这个语句的背后,语言又做了什么事情呢?

调研看,它在生成sql之前会将占位符替换掉,生成真正的sql。

但是mysql里却是真正支持占位符的,它叫prepared statement。

用法如下:

mysql> PREPARE stmt_test FROM 'select name_chn from tags where id=?';
Query OK, 0 rows affected (0.01 sec)
Statement preparedmysql> PREPARE stmt_test FROM 'select name_chn from tags where id = ?';
Query OK, 0 rows affected (0.00 sec)
Statement preparedmysql> SET @tag_id=1;
Query OK, 0 rows affected (0.00 sec)mysql> EXECUTE stmt_test USING @tag_id;
+-----------+
| name_chn  |
+-----------+
| 9.9包邮   |
+-----------+
1 row in set (0.00 sec)mysql> 

分为三个步骤:

第一步准备并编译一个statement(stmt_test);
第二步设置占位符对应变量的值(tag_id);
第三步执行statement。

这样的使用场景是什么呢,应该是一个这么场景,一个语句是一定的模板,但是里面一个或者两个值有变化,并且执行次数很多,使用以上方法会少一步编译sql的过程,会很大的提高效率的。

那statement是不是可以无限量的生成呢,答案肯定不是。

在mysql的配置项里有这么一个配置:max_prepared_stmt_count,代表最大的stmt量,查询mysql的官方文档:

可以看出stmt是有限制的,那么,我们怎么使用它才能不超过限制呢?

我也不知道,官方文档有一段是这样说的:

This variable limits the total number of prepared statements in the server. It can be used in environments where there is the potential for denial-of-service attacks based on running the server out of memory by preparing huge numbers of statements. If the value is set lower than the current number of prepared statements, existing statements are not affected and can be used, but no new statements can be prepared until the current number drops below the limit. The default value is 16,382. The permissible range of values is from 0 to 1 million. Setting the value to 0 disables prepared statements.

我猜想应该是需要我们自己维护一个全局变量代表已经生成的stmt数量吧。

那么如果我们知道了stmts的量已经超了,怎么删除呢?

mysql> DEALLOCATE PREPARE stmt_test;
Query OK, 0 rows affected (0.00 sec)

简单介绍到这吧,至于在各个语言里怎么用,就要看各自的api了。

mysql的prepared statement相关推荐

  1. MySQL视图查询报错:Prepared statement needs to be re-prepared

    From: https://www.ywnds.com/?p=12609 今天公司的项目视图查询报错,报错如:ERROR 1615 (HY000): Prepared statement needs ...

  2. prepared statement mysql_MySQL数据库之MySQL Prepared Statement

    本文主要向大家介绍了MySQL数据库之MySQL Prepared Statement ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Summary: in this tuto ...

  3. Prepared statement needs to be re-prepared问题

    执行存储过程时Java代码报错:java.sql.SQLException: Prepared statement needs to be re-prepared:单独调用存储过程也是报错:Prepa ...

  4. Prepared statement needs to be re-prepared

    web页面报错:Error 1615: Prepared statement needs to be re-prepared mysql引起的错误,搜索了一下,都是设置 set global tabl ...

  5. PostgreSQL — Prepared Statement 预编译

    目录 文章目录 目录 PREPARE 指令 EXECUTE 指令 DEALLOCATE 指令 EXPLAIN 指令 ANALYZE 指令 ERROR,0A000,"cached plan m ...

  6. 对PostgreSQL的prepared statement的深入理解

    看官方文档: http://www.postgresql.org/docs/current/static/sql-prepare.html PREPARE creates a prepared sta ...

  7. Prepared statement needs to be re-prepare

    sql抛出  Prepared statement needs to be re-prepared 异常 按照网上说的设置table_open_cache和table_definition_cache ...

  8. MySQL学习之Statement对象

    学自 狂神说 MySQL学习之Statement对象 Statement对象 CRUD操作-create CRUD操作-delete CRUD操作-update CRUD-read 代码实现 SQL注 ...

  9. SQLSTATE[HY000]: General error: xxxx Prepared statement needs to be re-prepared

    tp5 SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared TP操作数据库操作报错 SQLS ...

最新文章

  1. POJ 3734 Blocks
  2. 高并发编程-通过volatile重新认识CPU缓存 和 Java内存模型(JMM)
  3. golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?
  4. 征稿 | MIUA 2022 医学影像理解与分析会议
  5. WebCruiser Web Security Scanner
  6. 【缺陷检测】基于matlab GUI形态学PCB电路板缺陷检测【含Matlab源码 821期】
  7. MATLAB GUI编程总结
  8. 东芝打印机共享怎么设置_理光打印机共享怎么设置?
  9. jQuery灯箱插件lightBox使用方法
  10. 项目介绍之论文格式的自动检测与修改系统
  11. 论文阅读笔记: (2022.05, icra) Traffic Context Aware Data Augmentation for Rare Object Detection in Autonom
  12. Spring cacheable
  13. 第四章 linux字符设备的编写一
  14. 【错误解决】Ubuntu 配置ibus中文输入法后却不能添加
  15. Java实现 藏宝架的宝物(分组DP,7.27阿里面试题)
  16. sqlite数据库下载安装和初步操作和所遇到的问题near sqlite3:syntax error
  17. 计算机属性安全选项卡,win10系统文件属性没有安全选项卡的图文办法
  18. 30行Python代码,打造一个微信群聊助手~
  19. 苹果最新服务器,苹果12热度不降反增,官网服务器崩溃,台积电却带来了好消息...
  20. 850页某省智慧政务大数据云平台建设方案

热门文章

  1. BUAA(2021春)第一次上机选择+填空(含解析)
  2. 什么是闭包?闭包的优缺点? 1
  3. 《人月神话》-人月神话
  4. yolo模型是什么神经网络,yolo是卷积神经网络吗
  5. reactive() 函数
  6. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)
  7. php hook类,基于 CodeIgniter 构建 JWT RESTfull API Server
  8. html页面执行sql语句,关于在页面上执行sql语句
  9. PHP pdo查询sqlite,PHP PDO 操作 sqlite数据库 案例
  10. Unity2021稳定版+Directory Monitoring