相关文件10bet官方网站 本手册下载 从本手册中摘录

MySQL 8.0参考手册/MySQL 8.0常见问题解答/ mysql 8.0常见问题解答:存储过程和函数

MySQL 8.0 FAQ: Stored Procedures and Functions .(存储过程与函数

A.4.1。MySQL 8.0是否支持存储过程和函数?
A.4.2。在哪里可以在哪里找到MySQL存储10bet官方网站过程和存储功能的文档?
A.4.3。有没有讨论论坛的MySQL存储过程?
A.4.4。哪里可以找到存储过程的ANSI SQL 2003规范?
A.4.5。您如何管理存储的例程?
A.4.6。是否有一种方法可以查看给定数据库中的所有存储过程和存储函数?
A.4.7。存储过程存储在哪里?
A.4.8。是否可以将存储过程或存储的函数分组到包中?
A.4.9。存储过程可以调用另一个存储过程吗?
A.4.10。存储过程可以调用触发器吗?
A.4.11。存储过程可以访问表吗?
A.4.12。存储过程是否有引发应用程序错误的语句?
A.4.13。存储过程是否提供异常处理?
A.4.14。MySQL 8.0存储的例程是否返回结果集?
A.4.15。是否支持存储程序的重新编译?
A.4.16。是否有一个相当于使用mod_plsql作为apache上的网关,以直接通信数据库中的存储过程?
A.4.17。我可以将数组作为输入传递给存储过程吗?
A.4.18。我可以将光标作为参数传递给存储过程吗?
A.4.19。我可以从存储过程中将光标作为Out参数返回吗?
A.4.20。我可以在存储的例程中打印变量的值以供调试之用吗?
A.4.21。我可以在存储过程中提交或回滚事务吗?
A.4.22。MySQL 8.0存储过程和功能是否使用复制?
A.4.23。复制源服务器上创建的存储过程和函数是否已复制到副本?
A.4.24。如何复制存储过程和函数中发生的操作?
A.4.25。是否有特殊的安全要求使用存储过程和功能以及复制?
A.4.26。复制存储过程和函数操作存在哪些限制?
A.4.27。上述限制是否影响MySQL做点时间恢复的能力?
A.4.28。正在采取什么措施来纠正上述限制?

A.4.1。

MySQL 8.0是否支持存储过程和函数?

是的。MySQL 8.0支持两种类型的存储例程,存储过程和存储函数。

A.4.2。

在哪里可以在哪里找到MySQL存储10bet官方网站过程和存储功能的文档?

看到第25.2节,“使用存储例程”

A.4.3。

有没有讨论论坛的MySQL存储过程?

是的。看到https://forums.10bet靠谱mysql.com/list.php?98

A.4.4。

哪里可以找到存储过程的ANSI SQL 2003规范?

不幸的是,官方规范没有自由(ANSI使其购买)。但是,有书,如sql - 99完成,真的由Peter Gulutzan和Trudy Pelzer提供全面的标准概述,包括覆盖存储程序。

A.4.5。

您如何管理存储的例程?

为存储例程使用明确的命名方案总是一个好习惯。可以使用创建[功能|程序]改变[功能|程序]掉落[功能|程序], 和显示创建(函数|过程).您可以使用该信息获取有关现有存储过程的信息例程表在Information_Schema.数据库(参见第26.3.30节,“INFORMATION_SCHEMA例程表”).

A.4.6。

是否有一种方法可以查看给定数据库中的所有存储过程和存储函数?

是的。对于命名的数据库dbname,使用此查询Information_schema.routines.桌子:

从information_schema中选择routine_type, routine_name。例程,ROUTINE_SCHEMA = 'dbname”;

有关更多信息,请参阅第26.3.30节,“INFORMATION_SCHEMA例程表”

可以使用存储例程的主体使用显示创建函数(对于存储的函数)或显示创建程序(用于存储过程)。看到第13.7.7.9节“show创建过程陈述”,以获取更多信息。

A.4.7。

存储过程存储在哪里?

存储过程存储在mysql.routines.mysql.parameters.表,它们是数据字典的一部分。您不能直接访问这些表。相反,查询Information_Schema.例程参数表。看到第26.3.30节,“INFORMATION_SCHEMA例程表”, 和第26.3.20节“Information_schema参数表”

你也可以使用显示创建函数获取有关存储功能的信息,以及显示创建程序获取有关存储过程的信息。看到第13.7.7.9节“show创建过程陈述”

A.4.8。

是否可以将存储过程或存储的函数分组到包中?

不,MySQL 8.0不支持这一点。

A.4.9。

存储过程可以调用另一个存储过程吗?

是的。

A.4.10。

存储过程可以调用触发器吗?

存储过程可以执行SQL语句,例如更新,触发一个触发器。

A.4.11。

存储过程可以访问表吗?

是的。存储过程可以根据需要访问一个或多个表。

A.4.12。

存储过程是否有引发应用程序错误的语句?

是的。MySQL 8.0实现了SQL标准信号兽人语句。看到第13.6.7节,“状况处理”

A.4.13。

存储过程是否提供异常处理?

MySQL实现处理程序根据SQL标准定义。看到第13.6.7.2节,“DECLARE…”处理程序声明”的细节。

A.4.14。

MySQL 8.0存储的例程是否返回结果集?

存储过程可以,但存储的函数不能。如果你表现平平选择在存储过程中,结果集直接返回给客户端。您需要使用MySQL 4.1(或更高版本)的客户端/服务器协议来工作。这意味着,例如,在PHP中,您需要使用mysqli延期而不是旧的mysql扩大。

A.4.15。

重新编译是否支持存储过程?

不在MySQL 8.0中。

A.4.16。

是否有一个相当于使用的MySQLmod_plsql作为Apache上的网关,可直接通过数据库中的存储过程通信?

MySQL 8.0中没有等同物。

A.4.17。

我可以将数组作为输入传递给存储过程吗?

不在MySQL 8.0中。

A.4.18。

我可以将光标作为一个参数到存储过程?

在MySQL 8.0中,游标仅在存储过程中可用。

A.4.19。

我可以返回一个游标作为一个出去来自存储过程的参数?

在MySQL 8.0中,游标仅在存储过程中可用。但是,如果您没有打开光标选择,结果将直接发送给客户端。你也可以选择到变量。看到第13.2.10节,“SELECT语句”

A.4.20。

我可以在存储的例程中打印变量的值以供调试之用吗?

是的,你可以在存储过程,但不是在存储函数中。如果你表现平平选择在存储过程中,结果集直接返回给客户端。您必须使用MySQL 4.1(或以上)客户端/服务器协议来工作。这意味着,例如,在PHP中,您需要使用mysqli延期而不是旧的mysql扩大。

A.4.21。

我可以在存储过程中提交或回滚事务吗?

是的。但是,您无法在存储的函数中执行事务性操作。

A.4.22。

MySQL 8.0存储过程和功能是否使用复制?

是的,存储过程和函数中执行的标准操作将从复制源服务器复制到副本。中详细描述了一些限制第25.7节“存储程序二进制记录”

A.4.23。

复制源服务器上创建的存储过程和函数是否已复制到副本?

是的,通过复制源服务器上的正常DDL语句进行存储过程和函数的创建被复制到副本,以便两个服务器上存在对象。改变,更改下降存储过程和函数的语句也被复制。

A.4.24。

如何复制存储过程和函数中发生的操作?

MySQL记录存储过程中发生的每个DML事件,并将这些单独的操作复制到一个副本中。执行存储过程的实际调用不会被复制。

更改数据的存储函数被记录为函数调用,而不是每个函数内部发生的DML事件。

A.4.25。

是否有特殊的安全要求使用存储过程和功能以及复制?

是的。由于副本具有权限执行从源的二进制日志中读取的任何语句,因此使用存储函数的特殊安全约束存在于复制。如果常用复制或二进制记录(用于时间点恢复)是活动的,那么MySQL DBA有两个安全选项对它们打开:

  1. 必须授予希望创建存储功能的任何用户极好的特权。

  2. 或者,DBA可以设置log_bin_trust_function_creators.系统变量为1,这使得任何标准创建例程创建存储函数的权限。

A.4.26。

复制存储过程和函数操作存在哪些限制?

嵌入在存储过程中的非确定性(随机)或基于时间的动作可能无法正常复制。通过他们的本性,随机产生的结果不是可预测的,不能完全转载;因此,复制到副本的随机动作不会镜像在源上执行的。声明存储的函数确定性或设置log_bin_trust_function_creators.将系统变量设置为0可以防止产生随机值的随机操作被调用。

另外,不能在副本上再现基于时间的动作,因为在存储过程中的这些动作的定时不能通过用于复制的二进制日志来再现。它仅记录DML事件,并且不计时约束。

最后,在大DML动作(例如批量插入件)期间发生错误的非译本表可以遇到复制问题,因为可以从DML活动部分地更新源,但由于发生的错误,没有对副本进行更新。解决方法是使用函数的DML操作来执行忽略关键字,以便忽略源上导致错误的更新,并将不导致错误的更新复制到副本。

A.4.27。

上述限制是否影响MySQL做点时间恢复的能力?

影响复制的相同限制会影响时间点恢复。

A.4.28。

正在采取什么措施来纠正上述限制?

您可以选择基于语句的复制或基于行的复制。原始复制实现基于基于语句的二进制日志记录。基于行的二进制日志记录解决了前面提到的限制。

混合复制也可用(通过使用--binlog-format =混合).这是复制的混合形式知道是否可以安全使用语句级复制,或者需要行级复制。

有关其他信息,请参见第17.2.1节“复制格式”