为什么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本身解释。 我不知道我的解释是否比手册更清晰,但也许其中之一(或两者结合)会带来一些理解。     

要回复问题请先登录注册