所谓的预处理技术,最初也是由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的预处理技术的更多相关文章

  1. [日常] MySQL的预处理技术测试

    MySQL预处理技术:1.减轻服务器压力2.防止sql注入,把传递过去的危险字符也只当做参数处理3.将sql语句强制一分为二:第一部分为前面相同的命令和结构部分,第二部分为后面可变的数据部分基本使用 ...

  2. php中对MYSQL操作之预处理技术(1)数据库dml操作语句

    <?php //预处理技术 //创建一个mysqli对象 $mysqli = new MySQLi("主机名","mysqlusername"." ...

  3. php+mysqli预处理技术实现添加、修改及删除多条数据的方法

    本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...

  4. CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  5. CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  6. MySQL pdo预处理能防止sql注入的原因

    MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...

  7. 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)

    一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...

  8. MySQL表分区技术

    MySQL表分区技术 MySQL有4种分区类型: 1.RANGE 分区 - 连续区间的分区 - 基于属于一个给定连续区间的列值,把多行分配给分区: 2.LIST 分区 - 离散区间的分区 - 类似于按 ...

  9. MySQL的优化技术总结

    MySQL的优化技术总结 如果Cache很大,把数据放入内存中的话,那么瓶颈可能是CPU瓶颈或者CPU和内存不匹配的瓶颈: seek定位的速度,read/write即读写速度: 硬件的提升是最有效的方 ...

随机推荐

  1. python标准库之argparse

    argparse的使用 argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并 ...

  2. sed 随笔

    1)sed 功能说明 sed     全称    stream editor    基本功能    增删改查    过滤    取行 语法格式: sed  [options]  [sed-comman ...

  3. requests库入门12-文件上传和下载

    因为找不到可以演示上传接口,所以只能纯代码了 文件上传 上传文件是在请求中使用files参数,files需要指向一个dict,然后dict里面的键是接口中对应文件名的字段,而值就是打开这个文件读取到内 ...

  4. CFtpFileFind例子

    #include <afx.h> #include <afxwin.h> #include <afxinet.h> #include <stdio.h> ...

  5. VC使一个对话框不显示

    //add  this void CbkDlg::OnNcPaint() {     ShowWindow(SW_HIDE);     CDialog::OnNcPaint(); }     初始化时 ...

  6. strstr()函数的使用

    strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. 实例: /** *Descriptio ...

  7. SQL Server统计数据库中表个数、视图个数、存储过程个数

    表个数 SELECT count(*) FROM sys.objects WHERE type='U' 视图个数 SELECT count(*) FROM sys.objects WHERE type ...

  8. Android Studio下载

    最新版本的Android Studio 2.1 RC下载地址: Windows: https://dl.google.com/dl/android/studio/ide-zips/2.1.0.8/an ...

  9. Struts2,springMVC获取request和response

    springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request;   protected H ...

  10. 树·二叉查找树ADT(二叉搜索树/排序树)

    1.定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值. 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它. 2.平均深度 在大O模型中, ...