为什么SQLYog创建MySQL存储过程时会更改定界符?

问题描述

| 当我使用sqlYog进行存储过程时,它会提供以下模板:
DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `apachelogs`.`test`()
    /*LANGUAGE sql
    | [NOT] DETERMINISTIC
    | { CONTAINS sql | NO sql | READS sql DATA | MODIFIES sql DATA }
    | sql Security { DEFINER | INVOKER }
    | COMMENT \'string\'*/
    BEGIN

    END$$

DELIMITER ;
我不知道为什么在创建存储过程之前更改定界符。以及为什么我仍然可以在
create
语句中使用
;
分隔符(我想可能是因为范围)。     

解决方法

        这将语句定界符更改为“ 3”,以防止MySQL尝试将存储过程中的任何分号解释为定界符。没有ѭ4,您将无法定义包含ѭ1的存储过程来分隔其中的语句。您可以将其视为在过程定义期间全局转义分号的一种方法。 从精美的手册中:   要重新定义mysql分隔符,请使用
delimiter
命令。以下示例显示了如何针对刚刚显示的“ 7”过程执行此操作。定界符更改为“ 8”,以使整个定义可以作为单个语句传递到服务器,然后在调用该过程之前恢复为“ 1”。这使得过程主体中使用的“ 1”定界符可以传递到服务器,而不是由mysql本身解释。 我不知道我的解释是否比手册更清晰,但也许其中之一(或两者结合)会带来一些理解。