MySQL绑定变量详解 - 极悦
首页 课程 师资 教程 报名

MySQL绑定变量详解

  • 2021-01-29 17:46:30
  • 1063次 极悦

 

MySQL绑定变量是MySQL中非常重要的一个特性。主要还是通过SQL语句来实现对变量的绑定,绑定变量的SQL语句:INSERT INTO tbl(col1, col2, col3) VALUES (?, ?, ?);。绑定变量的SQL,使用问号标记可以接收参数的位置,当真正需要执行具体查询的时候,则使用具体值代替这些问号。

当创建一个绑定变量SQL时,客户端(如C或JAVA等)向服务器发送了一个SQL语句的原型。服务器端收到这个SQL语句的框架后,解析并存储这个SQL语句的部分执行计划,返回给客户端一个SQL语句处理句柄。以后每次执行这类查询,客户端都制定使用这个句柄。

MySQL在使用绑定变量的时候可以更高效地执行大量重复语句的原因:

1.在服务器端只需要解析一次SQL语句。

2.在服务器端某些优化器的工作只需要执行一次,因为它会缓存一部分的执行计划。

3.以二进制的方式只发送参数和句柄,比起每次发送ASCII码文本效率更高。不过最大的节省还是来自于BLOB和TEXT字段,绑定变量的形式可以分块传输,而无须一次性传输。二进制协议在客户端也可以节省很多内春,减少了网络开销,还节省了将数据从存储原始格式转换成文本格式的开销。

4.仅仅是参数而不是整个查询语句需要发送到服务器端,所以网络开销会更小。

MySQL在存储参数的时候,直接将其存放到缓存中,不再需要在内存中多次复制。 5.绑定变量相对也更加安全。无须在应用程序中处理转义,一则更简单明了,二则也大大减少了SQL注入和攻击的风险。

绑定变量是会话级别的,所以连接之间不能共用绑定变量句柄。同样地,一旦连接断开,则原来的句柄也不能再使用。(连接池和持久化连接可以在一定程度上缓解这个问题)

MySQL5.1之前,绑定变量的SQL是不能使用查询缓存的。并不是所有的时候使用绑定变量都能获得更好的性能。如果只是执行一次SQL,那么使用绑定变量的方式五一比直接执行多了一次额外的准备消耗阶段,而且还需要一次额外的网络开销。(要正确的使用绑定变量,还需要在使用完成之后,释放相关的资源)

当前版本下,还不能在存储函数中使用绑定变量,但是在存储过程中可以使用

如果总是忘记释放绑定变量资源,则在服务器端很容易发发生资源泄漏。绑定变量SQL总是的限制是一个全局限制,所以某一个其他的错误可能会对所有其它的线程都产生影响。

有些操作,如BEGIN,无法在绑定变量中完成。

三种绑定变量类型的部分区别:

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

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

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

以上就是MySQL绑定变量有关的知识点讲解,实际上,作为MySQL的重要高级特性之一,能够减少硬解析,降低CPU的争用,节省shared_pool。在本站的MySQL教程中,对其他的MySQL高级特性都有这样的详细的讲解,带你轻松学会MySQL高级特性。

 

 

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交