• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 存储的常规语法

    存储例程可以是过程,也可以是函数。使用CREATE PROCEDURECREATE FUNCTION语句创建存储的例程(请参见“ CREATE PROCEDURE和CREATE FUNCTION语句”)。使用CALL语句调用过程(请参见“ CALL语句”),并且只能使用输出变量传回值。可以像其他任何函数一样从语句内部调用一个函数(即,通过调用该函数的名称),并且可以返回标量值。存储例程的主体可以使用复合语句(请参见“复合语句”)。

    可以使用DROP PROCEDUREDROP FUNCTION语句删除存储的例程(请参见“ DROP PROCEDURE和DROP FUNCTION语句”),并可以使用ALTER PROCEDUREALTER FUNCTION语句对其进行更改(请参见“ ALTER PROCEDURE语句”)。

    存储过程或函数与特定数据库相关联。这有几个含义:

    • 调用例程时,将执行隐式操作(例程终止时撤消操作)。不允许在存储的例程中使用语句。USE db_nameUSE
    • 您可以使用数据库名称来限定例程名称。这可以用来引用不在当前数据库中的例程。例如,要调用与数据库关联的存储过程p或函数ftest可以说CALL test.p()test.f()
    • 删除数据库时,所有与之关联的存储例程也将删除。

    存储的函数不能递归。

    存储过程中的递归是允许的,但默认情况下被禁用。要启用递归,请将max_sp_recursion_depth服务器系统变量设置为大于零的值。存储过程递归增加了对线程堆栈空间的需求。如果增加的值max_sp_recursion_depth,则可能有必要通过增加thread_stack服务器启动时的值来增加线程堆栈的大小。有关更多信息,请参见“服务器系统变量”。

    MySQL支持一个非常有用的扩展,该扩展允许在SELECT存储过程内部使用正则语句(即,不使用游标或局部变量)。此类查询的结果集只是直接发送到客户端。多个SELECT语句生成多个结果集,因此客户端必须使用支持多个结果集的MySQL客户端库。这意味着客户端必须使用至少从4.1开始的MySQL版本的客户端库。客户端CLIENT_MULTI_RESULTS在连接时还应指定选项。对于C程序,可以使用mysql_real_connect()C API函数来完成。请参见“ mysql_real_connect()”和“ C API多语句执行支持”。