存储过程和函数
A.4.1。 | MySQL 8.0是否支持存储过程和函数? |
是。MySQL 8.0支持两种类型的存储例程:存储过程和存储函数。 | |
A.4.2。 | 在哪里可以找到有关MySQL存储过程和存储函数的文档? |
请参见“MySQL存储例程”。 | |
A.4.3。 | 是否有MySQL存储过程的讨论区? |
是。见 https://forums.mysql.com/list.php?98。 | |
A.4.4。 | 在哪里可以找到存储过程的ANSI SQL 2003规范? |
不幸的是,官方规范不是免费提供的(ANSI使它们可以购买)。但是,有一些书籍,例如Peter Gulutzan和Trudy Pelzer 撰写的《SQL-99 Complete》,《 Really》,提供了对该标准的全面概述,包括对存储过程的介绍。 | |
A.4.5。 | 您如何管理存储的例程? |
对存储的例程使用明确的命名方案始终是一个好习惯。您可以管理存储与程序 | |
A.4.6。 | 有没有办法参见给定数据库中的所有存储过程和存储函数? |
是。对于名为的数据库
有关更多信息,请参见“ INFORMATION_SCHEMA例程表”。 可以使用 | |
A.4.7。 | 存储过程存储在哪里? |
存储过程存储在 您还可以 | |
A.4.8。 | 是否可以将存储过程或存储函数分组到包中? |
不可以。MySQL8.0不支持此功能。 | |
A.4.9。 | 一个存储过程可以调用另一个存储过程吗? |
是。 | |
A.4.10。 | 存储过程可以调用触发器吗? |
存储过程可以执行 | |
A.4.11。 | 存储过程可以访问表吗? |
是。存储过程可以根据需要访问一个或多个表。 | |
A.4.12。 | 存储过程是否有引发应用程序错误的语句? |
是。MySQL 8.0实现了SQL标准 | |
A.4.13。 | 存储过程是否提供异常处理? |
MySQL | |
A.4.14。 | MySQL 8.0存储例程可以返回结果集吗? |
存储过程可以,但存储函数不能。如果 | |
A.4.15。 | 是否 |
不在MySQL 8.0中。 | |
A.4.16。 | 是否有一个MySQL等同于 |
MySQL 8.0中没有等效功能。 | |
A.4.17。 | 我可以将数组作为输入传递给存储过程吗? |
不在MySQL 8.0中。 | |
A.4.18。 | 我可以将游标作为 |
在MySQL 8.0中,游标仅在存储过程中可用。 | |
A.4.19。 | 我可以 |
在MySQL 8.0中,游标仅在存储过程中可用。但是,如果未在上打开游标 | |
A.4.20。 | 我可以在存储的例程中打印出变量的值以进行调试吗? |
是的,您可以在存储过程中执行此操作,但不能在存储函数中执行此操作。如果 | |
A.4.21。 | 我可以在存储过程中提交或回退事务吗? |
是。但是,您不能在存储的函数中执行事务操作。 | |
A.4.22。 | MySQL 8.0存储过程和函数可用于复制吗? |
是的,在存储过程和函数中执行的标准操作从MySQL主服务器复制到Slave服务器。“存储的程序二进制日志记录”中详细描述了一些限制。 | |
A.4.23。 | 在主服务器上创建的存储过程和函数是否复制到从服务器上? |
是的,在主服务器上通过常规DDL语句执行的存储过程和函数的创建被复制到从服务器上,因此对象将在两个服务器上都存在。 | |
A.4.24。 | 如何复制在存储过程和函数内部进行的操作? |
MySQL记录存储过程中发生的每个DML事件,并将这些单独的动作复制到从属服务器。执行存储过程的实际调用不会被复制。 更改数据的存储函数记录为函数调用,而不记录为每个函数内部发生的DML事件。 | |
A.4.25。 | 使用存储过程和功能以及复制是否有特殊的安全要求? |
是。由于从属服务器有权执行从主控二进制日志中读取的任何语句,因此存在将安全功能与复制一起使用的特殊安全约束。如果通常复制或二进制日志记录(出于时间点恢复的目的)处于活动状态,则MySQL DBA可以使用两个安全选项:
| |
A.4.26。 | 复制存储过程和函数操作存在哪些限制? |
嵌入在存储过程中的不确定性(随机)或基于时间的操作可能无法正确复制。就其本质而言,随机产生的结果是不可预测的并且不能准确地再现,因此,复制到从属设备的随机操作将不会镜像在主设备上执行的操作。声明存储函数为 此外,基于时间的操作无法在从属服务器上重现,因为在存储过程中此类操作的时序无法通过用于复制的二进制日志进行重现。它仅记录DML事件,不考虑时序约束。 最后,在大型DML操作(例如批量插入)期间发生错误的非事务处理表可能会遇到复制问题,因为可能会从DML活动中部分地更新主服务器,但是由于发生错误而不会对从服务器进行更新。一种解决方法是使用 | |
A.4.27。 | 前面的限制是否会影响MySQL进行时间点恢复的能力? |
影响复制的相同限制确实会影响时间点恢复。 | |
A.4.28。 | 正在采取什么措施纠正上述限制? |
您可以选择基于语句的复制或基于行的复制。原始复制实现基于基于语句的二进制日志记录。基于行的二进制日志记录解决了前面提到的限制。 也可以使用混合复制(通过使用启动服务器 有关更多信息,请参见“复制格式”。 |