MySQL - 存储过程VS准备的声明
本文将考虑从MySQL透视中考虑存储过程和准备的陈述。它将依次审查并讨论其相似之处及其差异,他们的个人优势和劣势,他们解决了哪些特殊问题,以及它们如何最好地利用?
MySQL存储的程序
存储过程(SP)是用SQL编写的服务器端过程,其存储在数据库中,可由数据库引擎直接访问。它也通过编程语言连接公开给客户端应用程序。服务器端存储过程提供典型客户端逻辑处理的许多优点。显而易见的是,在网络上传播的流量减少,这是诱导瓶颈的主要延迟涉及应用程序性能 - 或者至少对性能的看法。
客户端处理的另一个性能问题是,它们仍然需要向数据库发送完整的文本查询。服务器端上的DB驱动程序仍然需要在每次调用查询语句时进行解析、分析、计划和优化。将过程存储在服务器上要高效得多,DB引擎可以对过程进行一次预编译和分析,然后将其提交到缓存中并直接运行。
第三个优点是“一次编写,处处执行”的原则。程序员可以用SQL编写并将其存储在数据库中。然后,它可以被任何连接的客户机编程语言调用。这使得开发和维护更加流betwayapp下载安装线型和高效,因为只需要编写一个共享过程并进行故障排除。
最后但并非最不重要的是,使用存储过程的主要原因是数据库安全性。存储过程通过将用户对数据库的访问解耦提供了添加的安全性。例如,不需要授予执行权限以外的访问或权限以运行存储过程。
存储过程是在服务器端使用SQL编写的,示例如下所示。
分隔符$ $
CREATE PROCEDURE `avg_sal`(out avg_sal decimal)
开始
Select avg(sal) into avg_sal from salary
结束$ $
要了解更多关于MySQL和存储过程的知识,可以在Udemy.com上学习
准备好的语句
准备的陈述(PS)通常与存储过程混淆,因为它们具有相同的核心优势。在大多数情况下,准备的陈述,如储存程序在大多数情况下改善了性能和效率。它们还提供增加的数据库安全性,因为它们从数据中解耦了应用程序逻辑。然而,它们是非常不同的,尽管它们的目的可能是相似的,但它们的方法和力学不是。那么准备好的声明是什么?
MySQL版本4.1及更高版本支持Server-侧的准备语句,它利用增强型二进制客户端 - 服务器协议。将客户端 - 服务器流量超出文本格式协议时,二进制协议更有效。这改善了网络性能,因为二进制数据具有比ASCII文本更小的字节大小。
准备好的声明包括三个要素;
- prepare—通过给语句命名并定义要执行的SQL查询来准备语句的执行
- Execute——执行准备好的语句,并通过占位符传递变量
- 解除分配 - 发布准备好的声明和资源
准备语句的基本语法如下所示
SELECT name FROM customer_id FROM customers WHERE customer_id = ?SET @pc = '107';执行id使用@pc;释放准备身份证;
- 上面的代码通过给语句一个名称(id)来准备执行语句。
- 然后它定义了SELECT语句。这里要注意的事情是
- ”?,用作名称表达式的占位符。
- 接下来,为名称定义变量:设置@PC ='107';
- 然后使用名称变量@pc执行查询
- 最后,取消分配准备和释放资源
创建了准备好的语句后,客户端将服务器与变量的占位符发送查询的原型。然后服务器解析,分析和处理此骨架查询。这是处理和准备负担,服务器必须使用每个SQL查询。但是,对于准备的语句,服务器存储表示查询的部分结构,并返回到客户端表示该部分处理后查询的语句句柄。然后,客户端可以通过仅发送Server语句句柄和占位符数据重复重复重复查询。
这意味着只有在会话期间的第一个场合,客户端只需要将服务器发送SQL查询的完整主体,并且仅在此场合时,服务器只需要解析,分析和计划执行该语句。随后客户端只发送句柄和变量,大大提高了网络性能和效率。同样,服务器只需要查询处理句柄和变量以及所有准备工作已经缓存。
但在使用准备好的语句时要注意一点;它们只在会话期间的本地连接上可用。一旦会话关闭,准备好的语句将被删除并重新分配,会话将持续存在,并在一定程度上缓解这个问题。然而,还有另一种方法可以使准备好的语句具有全局可访问性。
预制语句不需要使用PHP或Java等客户端库。相反,它们可以使用SQL接口。使用SQL接口的情况是MySQL 5及以后版本可以在服务器端存储过程中使用准备好的语句。
这是一个例子:
删除过程如果存在`表:/ adpet_cust`;delimiter \\创建程序`get_cust' BEGIN SET @cid=input;准备ID“选择customer_id,名字从客户customer_id ='';执行id使用@cid;释放准备身份证;结束\ \
嵌套在存储过程中的预处理语句以粗体标记。
那么为什么要使用MySQL准备的陈述?
- 为了性能和效率
- 对于安全性 - 从数据中解耦逻辑,并强制执行数据类型规则
- 用于在存储过程中创建动态SQL
MySQL准备语句提供了一种从客户端编程语言(如VB、PHP和Java)编写高效查询的方法,这些语言利用了MySQL增强的二进制协议。或者,程序员可以选择SQL接口,并在存储过程中嵌套准备好的语句。