MySQL Prepared语句的具体使用

 更新时间:2024年09月03日 09:44:27   作者:V1ncent Chen  
本文主要介绍了MySQL Prepared语句的具体使用,可以利用prepared语句来避免重复解析SQL的开销,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在数据库应用中,很多SQL语句都会重复执行很多次,每次执行可能只是where条件中的变量值不同,但MySQL依然会解析SQL语法并生成执行计划。对于这类情况,可以利用prepared语句来避免重复解析SQL的开销。

一、prepared语句优点

prepared语句通过准备一个SQL执行对象,然后通过execute语句来重复进行执行,在每次执行的过程中提供变量的实际值。相比于重复执行SQL语句,prepared statement具有如下优势:

  • 在execute语句重复执行的过程中,每次只有传入的变量值不同,SQL的执行计划不会改变,避免重复解析SQL。
  • 避免SQL注入攻击。

二、prepare语句用法

prepare statement主要有3个组成部分:

  • prepare语句:生成一个prepared statement对象并为其指定别名,可使用占位符?指定变量。
  • execute语句:通过别名执行一个prepared statement,可通过using子句为变量提供值。
  • deallocate prepared语句:通过别名释放一个prepared statement。

Prepare语句的生效范围是会话,MySQL使用参数max_prepared_stmt_count来控制语句的最大数量,如果将该参数设置为0,将会禁用prepared statement功能。

show variables like 'max_prepared_stmt_count';

在这里插入图片描述

执行如下SQL准备示例数据:

create table person(
id int auto_increment primary key,
name varchar(32));
insert into person values (null, 'Vincent'), (null, 'Victor'), (null, 'Grace');
select * from person;

在这里插入图片描述

2.1 prepare语句

prepare语句根据文本生成一个SQL语句对象,并为其指定一个别名,在准备过程中,可以使用占位符?来替代变量:

set @sql = 'select name from person where id=?';
prepare stmt from @sql;

在这里插入图片描述

示例中通过变量名来传入SQL文本,也可以直接通过SQL文本prepare,例如:prepare stmt from ‘select name from person where id=?’;

prepare语句还有一个较常用的场景为动态SQL拼接。即根据用户选择的条件来快速调整过滤条件拼接出不同的SQL:

set @base = 'select * from person where 1=1';
set @id_filter = ' and id=?';
set @name_filter = ' and name=?';
set @sql2 = concat(@base, @id_filter, @name_filter);   -- 选择了条件,就加入拼接
prepare stmt2 from @sql2;

在这里插入图片描述

2.2 execute语句

执行完prepare语句后,即可用execute语句来执行,如果有?代替的变量,则需要通过using语句为其指定值(数量要和prepare语句中?数量相同)。execute语句在每次执行提供不同的变量,即可实现一次解析,多次执行:

set @var1 = 1;
execute stmt using @var1;
set @var2 = 2;
execute stmt using @var2;

在这里插入图片描述

注意using子句中只能通过变量来提供值,如果通过常量提供值,则会报错:

execute stmt using 1;

在这里插入图片描述

2.3 deallocate prepare语句

prepare语句使用完成后可以使用deallocate/drop prepare ….语句手动进行释放,另外当会话断开时,所有未释放的prepare语句也会自动释放,因此重连或者异常中断都会导致prepare statement丢失。

deallocate prepare stmt;

在这里插入图片描述

到此这篇关于MySQL Prepared语句的具体使用的文章就介绍到这了,更多相关MySQL Prepared语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python机器学习入门(五)之Python算法审查

    Python机器学习入门(五)之Python算法审查

    这篇文章主要介绍了Python机器学习入门知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Python中使用threading.Event协调线程的运行详解

    Python中使用threading.Event协调线程的运行详解

    这篇文章主要介绍了Python中使用threading.Event协调线程的运行详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python Selenium自动化获取页面信息的方法

    Python Selenium自动化获取页面信息的方法

    这篇文章主要介绍了Python Selenium自动化获取页面信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • pycharm配置python环境的详细图文教程

    pycharm配置python环境的详细图文教程

    PyCharm是一款功能强大的Python编辑器,具有跨平台性,下面这篇文章主要给大家介绍了关于pycharm配置python环境的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Python中常用的os操作汇总

    Python中常用的os操作汇总

    这篇文章主要汇总了Python中常用的os操作,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • python解析PDF程序代码

    python解析PDF程序代码

    python解析pdf信息,目前还是不能做到很完善,每个方法都会有它的弊端,都需要结合自己的业务场景来和其它方法一块进行使用,从而达到一个相对满意的目标,接下来给大家介绍python解析PDF的程序代码,一起看看吧
    2021-06-06
  • python之json文件读写操作的四种方法

    python之json文件读写操作的四种方法

    本文介绍了Python中处理JSON数据的四个主要方法,包括json.loads用于将JSON字符串转化为Python字典,json.load用于从JSON文件读取数据,json.dumps将Python对象转换为JSON字符串,而json.dump则用于将数据写入JSON文件,感兴趣的可以了解一下
    2025-12-12
  • python矩阵运算,转置,逆运算,共轭矩阵实例

    python矩阵运算,转置,逆运算,共轭矩阵实例

    这篇文章主要介绍了python矩阵运算,转置,逆运算,共轭矩阵实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python scrapy爬虫代码及填坑

    python scrapy爬虫代码及填坑

    这篇文章主要介绍了python scrapy爬虫代码及填坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java分治归并排序算法实例详解

    Java分治归并排序算法实例详解

    这篇文章主要介绍了Java分治归并排序算法,结合实例形式详细分析了分治归并排序算法的原理及java实现技巧,需要的朋友可以参考下
    2017-12-12

最新评论