- A.4.1. MySQL 5.7 是否支持存储过程和函数?
- A.4.2. 在哪里可以找到 MySQL 存储过程和存储函数的文档?
- 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 5.7 存储例程可以返回结果集吗?
- A.4.15。 存储过程是否支持 WITH RECOMPILE?
- A.4.16. 是否有一个 MySQL 相当于使用 mod_plsql 作为 Apache 上的网关直接与数据库中的存储过程对话?
- A.4.17. 我可以将数组作为输入传递给存储过程吗?
- A.4.18。 我可以将游标作为 IN 参数传递给存储过程吗?
- A.4.19. 我可以从存储过程中将游标作为 OUT 参数返回吗?
- A.4.20。 我可以在存储的例程中打印出变量的值以进行调试吗?
- A.4.21. 我可以在存储过程中提交或回滚事务吗?
- A.4.22。 MySQL 5.7 存储过程和函数是否支持复制?
- A.4.23。 在复制源服务器上创建的存储过程和函数是否复制到副本?
- A.4.24。 如何复制存储过程和函数中发生的操作?
- A.4.25。 将存储过程和函数与复制一起使用是否有特殊的安全要求?
- A.4.26. 复制存储过程和函数操作存在哪些限制?
- A.4.27. 上述限制是否会影响 MySQL 进行时间点恢复的能力?
- A.4.28。 正在采取什么措施来纠正上述限制?
A.4.1. | MySQL 5.7 是否支持存储过程和函数? |
是的。MySQL 5.7 支持两种类型的存储例程,存储过程和存储函数。 | |
A.4.2. | 在哪里可以找到 MySQL 存储过程和存储函数的文档? |
A.4.3. | 是否有 MySQL 存储过程的讨论论坛? |
A.4.4. | 在哪里可以找到存储过程的 ANSI SQL 2003 规范? |
不幸的是,官方规范不能免费获得(ANSI 可以购买)。但是,有些书籍,如Peter Gulutzan 和 Trudy Pelzer 合着的SQL-99 Complete, Really,提供了标准的全面概述,包括存储过程的覆盖范围。 | |
A.4.5. | 您如何管理存储的例程? |
为存储的例程使用清晰的命名方案始终是一个好习惯。 | |
A.4.6. | 有没有办法查看给定数据库中的所有存储过程和存储函数? |
是的。对于名为 的数据库
有关详细信息,请参阅 第 24.3.21 节,“INFORMATION_SCHEMA ROUTINES 表”。
可以使用
| |
A.4.7. | 存储过程存储在哪里? |
在系统数据库的
您还可以使用 | |
A.4.8。 | 是否可以将存储过程或存储函数分组到包中? |
否。MySQL 5.7 不支持此功能。 | |
A.4.9. | 一个存储过程可以调用另一个存储过程吗? |
是的。 | |
A.4.10. | 存储过程可以调用触发器吗? |
| |
A.4.11. | 存储过程可以访问表吗? |
是的。存储过程可以根据需要访问一个或多个表。 | |
A.4.12。 | 存储过程是否有引发应用程序错误的声明? |
是的。MySQL 5.7 实现了 SQL 标准
| |
A.4.13. | 存储过程是否提供异常处理? |
MySQL | |
A.4.14. | MySQL 5.7 存储例程可以返回结果集吗? |
存储过程可以,但存储函数不能。如果
| |
A.4.15。 |
是否 |
不在 MySQL 5.7 中。 | |
A.4.16. |
是否有一个 MySQL 相当于
|
MySQL 5.7 中没有等效项。 | |
A.4.17. | 我可以将数组作为输入传递给存储过程吗? |
不在 MySQL 5.7 中。 | |
A.4.18。 |
我可以将游标作为 |
在 MySQL 5.7 中,游标仅在存储过程中可用。 | |
A.4.19. |
|
在 MySQL 5.7 中,游标仅在存储过程中可用。但是,如果您不在 a 上打开游标
| |
A.4.20。 | 我可以在存储的例程中打印出变量的值以进行调试吗? |
是的,您可以在存储过程中执行此操作,但不能在存储函数中执行。如果
| |
A.4.21. | 我可以在存储过程中提交或回滚事务吗? |
是的。但是,您不能在存储函数中执行事务操作。 | |
A.4.22。 | MySQL 5.7 存储过程和函数是否支持复制? |
是的,在存储过程和函数中执行的标准操作从复制源服务器复制到副本。第 23.7 节“存储程序二进制日志记录”中详细描述了一些限制。 | |
A.4.23。 | 在复制源服务器上创建的存储过程和函数是否复制到副本? |
是的,在复制源服务器上通过正常 DDL 语句执行的存储过程和函数的创建被复制到副本,因此对象存在于两个服务器上。 | |
A.4.24。 | 如何复制存储过程和函数中发生的操作? |
MySQL 记录存储过程中发生的每个 DML 事件,并将这些单独的操作复制到副本。不会复制为执行存储过程而进行的实际调用。 更改数据的存储函数被记录为函数调用,而不是每个函数内部发生的 DML 事件。 | |
A.4.25。 | 将存储过程和函数与复制一起使用是否有特殊的安全要求? |
是的。因为副本有权执行从源的二进制日志中读取的任何语句,所以存在特殊的安全约束以将存储函数与复制一起使用。如果一般的复制或二进制日志记录(为了时间点恢复的目的)处于活动状态,那么 MySQL DBA 有两个安全选项可供选择:
| |
A.4.26. | 复制存储过程和函数操作存在哪些限制? |
存储过程中嵌入的非确定性(随机)或基于时间的操作可能无法正确复制。就其本质而言,随机产生的结果是不可预测的,也无法准确重现;因此,复制到副本的随机操作不会反映在源上执行的操作。将存储函数声明为 此外,基于时间的操作无法在副本上重现,因为存储过程中此类操作的时间无法通过用于复制的二进制日志重现。它只记录 DML 事件,不考虑时序约束。
最后,在大型 DML 操作(例如批量插入)期间发生错误的非事务性表可能会遇到复制问题,因为源可能会从 DML 活动中部分更新,但由于发生错误而不会对副本进行任何更新。解决方法是使用关键字执行函数的 DML 操作,
| |
A.4.27. | 上述限制是否会影响 MySQL 进行时间点恢复的能力? |
影响复制的相同限制会影响时间点恢复。 | |
A.4.28。 | 正在采取什么措施来纠正上述限制? |
您可以选择基于语句的复制或基于行的复制。最初的复制实现是基于基于语句的二进制日志记录。基于行的二进制日志记录解决了前面提到的限制。
也可以使用
混合 有关其他信息,请参阅 第 16.2.1 节,“复制格式”。 |