存储过程 () 是存储在服务器中的一组指定的 SQL 语句,客户端可以引用存储过程,而无需不断地重新发出各个语句。存储过程类型分为存储过程()和存储函数()。
Ø存储过程:通过CALL语句调用过程。这些过程可以使用输出变量或结果集返回值。
Ø存储函数:在语句中调用函数。这些函数返回标量值。
l使用存储过程的好处:
1)客户端功能
存储过程允许您在数据库中集中创建一条语句或一系列语句,供用不同编程语言编写或在不同平台上运行的多个客户端应用程序使用。
2)安全性
存储过程为需要最高安全级别的应用程序提供了一种解决方法。例如,银行使用存储过程和函数来执行所有常见操作。这提供了一个一致、安全的环境。可以对存储过程进行编码,以确保正确记录每个操作。在这种设置中,应用程序和用户无法直接访问数据库表,只能执行特定的存储过程。
3)性能
存储过程提高了性能,因为服务器和客户端之间需要发送的信息更少。客户端通过名称调用存储过程,而不是传递存储过程中包含的所有语句。
4)函数库
存储过程允许您使用数据库服务器中的函数库。这些库充当数据库的 API。
l使用存储过程的问题:
1)增加服务器负载
在数据库本身中执行存储过程会增加服务器负载并降低应用程序性能。您可以运行测试并使用常识来确保将逻辑包含在数据库本身中的便利性超过了它可能导致的性能问题。
2)开发工具有限
MySQL 中支持存储过程的开发工具并不像更通用的编程语言那样成熟和清晰。这种限制会使存储过程的编写和调试过程变得更加困难,需要在决策过程中予以考虑。
3)语言能力和速度有限
虽然在许多情况下,在数据库本身中包含逻辑有很大的优势,但与其他编程语言相比,可以实现的目标仍然存在限制。存储过程在数据库上下文中执行,在处理大量数据时比客户端应用程序中的存储过程表现更好,但客户端应用程序语言可能具有更强大和通用的处理、集成或其他库功能。您必须考虑所需的功能范围,以确保为每个存储过程使用最佳的解决方案。
4) 有限的调试和分析能力
1.1.执行存储过程
用于调用存储过程的命令与 MySQL 中的其他命令非常相似。使用CALL语句调用存储过程()。存储过程使用输出变量或结果集来返回值。与任何其他函数一样,函数的执行是从语句内调用的(即通过调用相应函数的名称),并且该函数返回一个标量值。
每个存储过程都与一个特定的数据库相关联。这有多重含义:
ØUSE:当调用存储过程时,MySQL在存储过程运行时执行隐式USE。不能在存储过程中发出 USE 语句。
Ø限定名称:存储过程名称可以使用存储过程的数据库名称进行限定。执行此操作以引用当前数据库外部的存储过程。例如,要调用与测试数据库关联的存储过程 p 或函数 f,请使用 CALL test.p() 或 test.f()。
Ø数据库删除:当数据库被删除时,与其关联的所有存储过程也将被删除。
MySQL 允许在存储过程中使用常规语句。此类查询的结果集直接发送到客户端。
1) 存储过程示例
mysql> //
mysql> ()
-> 开始
-> '计数', COUNT(*) FROM ;
-> '城市计数', COUNT(*) FROM City;
-> '计数', COUNT(*) FROM ;
->结束//
mysql>;
Ø复合语句
可以通过在存储过程中使用 BEGIN…END 语法并使用触发器来创建复合语句。 BEGIN...END 块可以包含零个或多个语句。空复合语句是合法的,并且复合语句中的语句数量没有上限。
Ø 分隔符
在 BEGIN…END 语法中,每个语句必须以分号 (;) 终止。由于mysql客户端使用分号作为SQL语句的默认终止字符,因此在交互式使用mysql命令行客户端或进行批处理时,必须使用语句来更改此设置。
在示例中,第一个语句用于将 SQL 语句终止字符更改为两个正斜杠 (//)。此更改可确保客户端不会将复合语句中的分号解释为语句分隔符,并且客户端不会过早地将语句发送到服务器。当创建存储过程的语句以 // 终止时,客户端会先将该语句发送到服务器,然后再发出将语句分隔符重置为分号的第二条语句。
2)存储功能:示例
mysql> //
mysql> (浮点(9,2), 浮点(3,2))
-> 浮点(9,2)
->没有SQL
-> 开始
-> 浮点(9,2)
-> 0;
-> 设置 = - * ;
->;
->结束//
mysql>;
Ø 条款
子句用于确定该函数返回值的类型。
Ø产品特点
有几个特征决定了存储函数所使用的数据的性质。在MySQL中,这些特性仅供参考。服务器不使用这些特性来限制存储函数允许执行的语句类型。
SQL 意味着存储函数包含用于读取或写入数据的语句。如果未明确提供上述任何特征,则这是默认值。
lNO SQL 表示存储函数不包含任何SQL 语句。
SQL DATA 表示存储函数包含读取数据的语句(例如 ),但不包含写入数据的语句。
SQL DATA 表示存储过程包含用于写入数据的语句(例如, 或 )。
注意:启用二进制日志记录后,如果您创建函数时未指定以下选项之一,MySQL 会生成错误:NO SQL、READS SQL DATA 或 .
Ø声明
使用存储过程中的语句来声明局部变量并初始化用户变量。可以在语句末尾添加子句来指定用户变量的初始值。如果省略该子句,则用户变量的初始值为 NULL。
ØSET语句
使用 SET 语句,您可以使用 = 或 := 作为赋值运算符为定义的变量赋值。
Ø声明
语句用于终止存储函数的执行并将值表达式返回给函数调用者。
1.2.检查存储过程
Ø秀秀
这些语句是 MySQL 扩展,类似于 SHOW TABLE。这些语句返回可用于重新创建指定存储过程的特定字符串。这些语句的主要限制之一是您必须知道过程或函数的名称,并且必须将其标识为过程或函数,然后才能尝试查看信息。
Ø秀秀
这些语句特定于 MySQL。它们返回存储过程的特征,例如数据库、名称、类型、创建者以及创建和修改日期。这些语句的优点是基于 LIKE 模式显示特定的存储过程。如果未指定架构,则会列出所有存储过程或所有存储函数的信息,具体取决于所使用的语句。例如,以下语句显示有关名称以“film”开头的过程的信息:
显示类似“电影%”\G
Ø。
.table 包含有关存储过程(过程和函数)的信息,并返回可以在 SHOW... 和 SHOW... 语句中找到的大部分详细信息,以包含用于创建存储过程的实际语法。在这三个选项中,此表提供了数据库中可用存储过程的完整表示。
例子:
mysql> , , ,
> 从 .
> 哪里像“电影%”;
+--------------------+----------------+---------- -- +----------------+
| | | | |
+--------------------+----------------+---------- -- +----------------+
| | | |根@ |
| | | |根@ |
+--------------------+----------------+---------- -- +----------------+
2 行一组(0.00 秒)
Ømysql系统数据库中与编程组件相关的表
mysql 系统数据库包含提供与 MySQL 存储过程功能相关的信息的表。这些表包括:
.event 表包含有关存储在 MySQL 服务器中的事件的信息;
.proc表包含MySQL服务器中存储过程和函数的信息;
.为引用存储过程的用户提供访问控制授权详细信息的表;
1.3.存储过程和执行安全
存储过程和函数的使用涉及多个权限。
默认操作:当您创建存储过程时,MySQL 会自动授予您的帐户对该存储过程的 ALTER 和 ALTER 权限。具有撤销权限和 GRANT 权限的用户可以稍后撤销或删除这些权限。创建存储过程后,您可以通过发出 SHOW 语句来验证这些权限。
授予权限:当在全局级别或数据库级别授予所有权限时,GRANT ALL 语句包括除 GRANT 之外的所有存储过程权限。要授予 GRANT 权限,请在语句末尾包含WITH GRANT 子句。您可以在单个存储过程级别授予、ALTER 和 GRANT 权限,但仅限于现有存储过程。要授予对单个存储过程的权限,请使用其数据库名称限定存储过程并提供关键字 or 来指示存储过程类型,如以下示例所示:
mysql> 授予,更改。授予“@”;
mysql> 将 .* 上的所有内容授予“@”;
mysql> 授予,更改。到 ''@'';
权限对应允许的操作
:创建一个存储过程。
ALTER:更改或删除存储过程。
:执行存储过程。
GRANT:向其他帐户授予权限。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。