我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL Prepared语句的具体使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL Prepared语句的具体使用

在数据库应用中,很多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';

MySQL Prepared语句的具体使用

执行如下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;

MySQL Prepared语句的具体使用

2.1 prepare语句

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

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

MySQL Prepared语句的具体使用

示例中通过变量名来传入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;

MySQL Prepared语句的具体使用

2.2 execute语句

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

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

MySQL Prepared语句的具体使用

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

execute stmt using 1;

MySQL Prepared语句的具体使用

2.3 deallocate prepare语句

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

deallocate prepare stmt;

MySQL Prepared语句的具体使用

到此这篇关于MySQL Prepared语句的具体使用的文章就介绍到这了,更多相关MySQL Prepared语句内容请搜索编程客栈(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网(www.lsjlt.com)! 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL Prepared语句的具体使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL Prepared语句的具体使用

目录一、prepared语句优点二、prepare语句用法2.1 prepare语句2.2 execute语句2.3 deallocate prepare语句在数据库应用中,很多SQL语句都会重复执行很多次,每次执行可能只是where条件中
MySQL Prepared语句的具体使用
2024-09-04

MySQL DQL语句的具体使用

目录DQL基本语法基础查询条件查询语法条件案例聚合函数DQLDQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。基本语法DQL 查询语句,语法结构如下:SELECT字段列表
2023-03-22

MySQLDQL语句的具体使用

本文主要介绍了MySQLDQL语句的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-21

Pythonmatch语句的具体使用

match语句接受一个表达式,并将其值与作为一个或多个case块给出的连续模式进行比较,本文主要介绍了Pythonmatch语句的具体使用,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

shell流程控制语句的具体使用

本文主要介绍了shell流程控制语句的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-19

shell 流程控制语句的具体使用

目录前言一、if - else 语句案例需求描述二、case语句三、while 语句四、until语句五、for语句for 语法写法一for 语法写法二for 语法写法三无限for循环六、select 语句八、文件测试 test九、整数和字
2023-05-12

详解Shell if else语句的具体使用方法

和其它编程语言类似,Shell 也支持选择结构,并且有两种形式,分别是 if else 语句和 case in 语句。本节我们先介绍 if else 语句,case in 语句将会在《Shell c
2022-06-04

Go 语言的 :=的具体使用

目录1. 单变量 :=2. 多变量 :=3. 小结:=   Go 语言中 = 和 := 有什么区别1. 单变量 :=Go 语言中新增了一个特殊的运算符:=,这个运算符可以使变量在不声明的情况下直接被赋值使用。其使用方法和带值声明变量类似,只
2022-06-07

mysql中mvcc的具体使用

目录一 MVCC的作用1.1 mvcc的作用1.2 快照读与当前读的区别与联系1.3 快照读1.4 当前读1.5 mvcc可以解决问题1.6 mvcc面试题:mvcc是怎么实现的二 MVCC实现原理2.1 原理2.2 undo log2.
mysql中mvcc的具体使用
2024-09-09

MySQL ddl语句的使用

前言 SQL的语言分类主要包含如下几种:DDL数据定义语言create、drop、alter数据定义语言 create、drop、alter 语句 。DML数据操纵语言insert、delete、update定义对数据库记录的增、删、改操作
2022-05-23

mysql间隙锁的具体使用

本文全面讲解MySQL间隙锁的使用方法,包括何时使用、类型、语法以及使用示例。间隙锁有助于防止幻读、保证范围查询完整性,但同时也存在资源消耗、死锁和影响查询性能等局限性。最佳实践建议在必要时使用、缩小锁范围、避免长时间持有锁,并使用死锁处理机制。
mysql间隙锁的具体使用
2024-04-02

MySQL binlog_ignore_db 参数的具体使用

前言: 经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比如说只让某个库记录 binglog
2022-05-10

Mysql CAST函数的具体使用

目录语法参数说明示例练习案例CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型语法CAST(value AS datatype)AS关键字用于分隔android两个参数,在AS之前的是要处理的数据,在AS之后的是要转
2022-08-12

MySQL ifnull()函数的具体使用

mysql IFNULL函数简介MySQL IFNULL函数是MySQL控制流函php数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。两个参数可以是文字值或表达式。以下说明了IFNUL
2022-08-11

编程热搜

目录