MySQL的预处理技术
所谓的预处理技术,最初也是由MySQL提出的一种减轻服务器压力的一种技术!
传统mysql处理流程
1, 在客户端准备sql语句
2, 发送sql语句到MySQL服务器
3, 在MySQL服务器执行该sql语句
4, 服务器将执行结果返回给客户端
这样每条sql语句请求一次,mysql服务器就要接收并处理一次,当一个脚本文件对同一条语句反复执行多次的时候,mysql服务器压力会变大,所以出现mysql预处理,减轻服务器压力!
预处理的基本策略:
将sql语句强制一分为二:
第一部分为前面相同的命令和结构部分
第二部分为后面可变的数据部分
在执行sql语句的时候,首先将前面相同的命令和结构部分发送给MySQL服务器,让MySQL服务器事先进行一次预处理(此时并没有真正的执行sql语句),而为了保证sql语句的结构完整性,在第一次发送sql语句的时候将其中可变的数据部分都用一个数据占位符来表示!比如问号?就是常见的数据占位符!
在MySQL预处理中有两种形式:带参数/不带参数预处理
1 不带参数预处理
首先查看一下表中的数据!
1.1 准备预处理语句
prepare 语句名称 from “预处理的sql语句”;
prepare sql_1 from "select * from pdo";
1.2 执行预处理语句
execute 语句名称;
execute sql_1;
1.3 删除预处理
drop prepare 语句名称;
drop prepare sql_1;
删除之后,就不能再执行预处理语句了!
2 带参数预处理
2.1准备预处理语句
prepare 语句名称 from “预处理的sql语句”;
prepare sql_2 from "select * from pdo where id = ?";
2.2 定义参数变量
set @变量名 = 值; --这里的@是在MySQL中定义变量的一种语法形式(类比php中的$符号)
set @id=2;
2.3 传递参数变量并执行预处理语句
execute 语句名称 using 参数变量;
execute sql_2 using @id; --选出id=2的信息
2.4 删除预处理
drop prepare 语句名称;
drop prepare sql_2;
注意:如果数据占位符不止一个,就按数据占位符的顺序传参就行了:
prepare sql_2 from "select * from pdo where id > ? && age > ?";
set @id=2;
set @age=30;
execute sql_2 using @id,@age;
注意此处的参数未知应与步骤一中的占位符对应
以上是MySQL预处理,一个脚本文件中预处理一条sql语句效果不明显,在反复执行某一条语句时使用预处理效率会提高!
学完在MySQL中使用预处理,下篇文章介绍在PDO中怎样使用预处理!
所谓的预处理技术,最初也是由MySQL提出的一种减轻服务器压力的一种技术!
传统mysql处理流程
1, 在客户端准备sql语句
2, 发送sql语句到MySQL服务器
3, 在MySQL服务器执行该sql语句
4, 服务器将执行结果返回给客户端
这样每条sql语句请求一次,mysql服务器就要接收并处理一次,当一个脚本文件对同一条语句反复执行多次的时候,mysql服务器压力会变大,所以出现mysql预处理,减轻服务器压力!
预处理的基本策略:
将sql语句强制一分为二:
第一部分为前面相同的命令和结构部分
第二部分为后面可变的数据部分
在执行sql语句的时候,首先将前面相同的命令和结构部分发送给MySQL服务器,让MySQL服务器事先进行一次预处理(此时并没有真正的执行sql语句),而为了保证sql语句的结构完整性,在第一次发送sql语句的时候将其中可变的数据部分都用一个数据占位符来表示!比如问号?就是常见的数据占位符!
在MySQL预处理中有两种形式:带参数/不带参数预处理
1 不带参数预处理
首先查看一下表中的数据!
1.1 准备预处理语句
prepare 语句名称 from “预处理的sql语句”;
prepare sql_1 from "select * from pdo";
1.2 执行预处理语句
execute 语句名称;
execute sql_1;
1.3 删除预处理
drop prepare 语句名称;
drop prepare sql_1;
删除之后,就不能再执行预处理语句了!
2 带参数预处理
2.1准备预处理语句
prepare 语句名称 from “预处理的sql语句”;
prepare sql_2 from "select * from pdo where id = ?";
2.2 定义参数变量
set @变量名 = 值; --这里的@是在MySQL中定义变量的一种语法形式(类比php中的$符号)
set @id=2;
2.3 传递参数变量并执行预处理语句
execute 语句名称 using 参数变量;
execute sql_2 using @id; --选出id=2的信息
2.4 删除预处理
drop prepare 语句名称;
drop prepare sql_2;
注意:如果数据占位符不止一个,就按数据占位符的顺序传参就行了:
prepare sql_2 from "select * from pdo where id > ? && age > ?";
set @id=2;
set @age=30;
execute sql_2 using @id,@age;
注意此处的参数未知应与步骤一中的占位符对应
以上是MySQL预处理,一个脚本文件中预处理一条sql语句效果不明显,在反复执行某一条语句时使用预处理效率会提高!
学完在MySQL中使用预处理,下篇文章介绍在PDO中怎样使用预处理!
MySQL的预处理技术的更多相关文章
- [日常] MySQL的预处理技术测试
MySQL预处理技术:1.减轻服务器压力2.防止sql注入,把传递过去的危险字符也只当做参数处理3.将sql语句强制一分为二:第一部分为前面相同的命令和结构部分,第二部分为后面可变的数据部分基本使用 ...
- php中对MYSQL操作之预处理技术(1)数据库dml操作语句
<?php //预处理技术 //创建一个mysqli对象 $mysqli = new MySQLi("主机名","mysqlusername"." ...
- php+mysqli预处理技术实现添加、修改及删除多条数据的方法
本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- MySQL pdo预处理能防止sql注入的原因
MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...
- MySQL表分区技术
MySQL表分区技术 MySQL有4种分区类型: 1.RANGE 分区 - 连续区间的分区 - 基于属于一个给定连续区间的列值,把多行分配给分区: 2.LIST 分区 - 离散区间的分区 - 类似于按 ...
- MySQL的优化技术总结
MySQL的优化技术总结 如果Cache很大,把数据放入内存中的话,那么瓶颈可能是CPU瓶颈或者CPU和内存不匹配的瓶颈: seek定位的速度,read/write即读写速度: 硬件的提升是最有效的方 ...
随机推荐
- python标准库之argparse
argparse的使用 argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并 ...
- sed 随笔
1)sed 功能说明 sed 全称 stream editor 基本功能 增删改查 过滤 取行 语法格式: sed [options] [sed-comman ...
- requests库入门12-文件上传和下载
因为找不到可以演示上传接口,所以只能纯代码了 文件上传 上传文件是在请求中使用files参数,files需要指向一个dict,然后dict里面的键是接口中对应文件名的字段,而值就是打开这个文件读取到内 ...
- CFtpFileFind例子
#include <afx.h> #include <afxwin.h> #include <afxinet.h> #include <stdio.h> ...
- VC使一个对话框不显示
//add this void CbkDlg::OnNcPaint() { ShowWindow(SW_HIDE); CDialog::OnNcPaint(); } 初始化时 ...
- strstr()函数的使用
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. 实例: /** *Descriptio ...
- SQL Server统计数据库中表个数、视图个数、存储过程个数
表个数 SELECT count(*) FROM sys.objects WHERE type='U' 视图个数 SELECT count(*) FROM sys.objects WHERE type ...
- Android Studio下载
最新版本的Android Studio 2.1 RC下载地址: Windows: https://dl.google.com/dl/android/studio/ide-zips/2.1.0.8/an ...
- Struts2,springMVC获取request和response
springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request; protected H ...
- 树·二叉查找树ADT(二叉搜索树/排序树)
1.定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值. 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它. 2.平均深度 在大O模型中, ...