MySQL的绑定变量

绑定变量的原理

从MySQL4.1版本开始,就支持服务器端的绑定变量(prepared statement),当创建一个绑定变量SQL时,客户端向服务器发送一个SQL语句的原型。服务器端接收到这个SQL语句后,解析并存储这个SQL语句的部分执行计划,返回给客户端一个SQL语句处理句柄。以后每次执行这类查询,客户端都指定使用这个句柄。

绑定变量的优势

  • 在服务器端只需要解析一次SQL语句。
  • 在服务器端某些优化器的工作只需执行一次,因为它会缓存一部分的执行计划。
  • 绑定变量的形式可以分块传输,无须一次性传输。
  • 仅仅是参数需要发送给服务器,而不是整个查询。
  • MySQL在存储参数的时候,直接将其放到缓存中,不需要再内存中多次复制。
  • 绑定变量更加安全,无须在应用程序中处理转义,一则简单,二则大大减少了SQL注入和攻击的风险。

绑定变量的限制

  • 绑定变量是会话级别的,所以连接之间不能共享绑定变量句柄。一旦连接关闭,原来的句柄也不能再使用了。(连接池和持久化连接一定程度上可以缓解这个问题)。
  • MySQL5.1之前,绑定变量的SQL无法使用查询缓存。
  • 并不是所有时候使用绑定变量都能获得更好的性能。绑定变量方式比直接执行多了一次额外的准备阶段,而且还需要一次额外的网络开销。
  • 绑定变量SQL总数的限制是一个全局限制,如果总是忘记释放绑定变量资源,某个地方的错误会对所有其他的线程都产生影响。

三种绑定变量实现

  1. 客户端模拟的绑定变量:客户端的驱动程序接收一个带参数的SQL,再将指定的值带入其中,最后将完整的查询发送给服务器端。

  2. 服务器端的绑定变量:客户端使用特殊的二进制协议将带参数的字符串发送到服务器端,然后使用二进制协议将具体的参数值发送给服务器端并执行。

  3. SQL接口的绑定变量:客户端先发送一个带参数的字符串到服务器端,这类似于使用PREPARE的SQL语句,然后发送设置参数的SQL,最后使用EXECUTE来执行SQL。所有这些都是使用普通的文本传输协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值