gpt4 book ai didi

mysql - 为什么 SQLYog 在创建 MySQL 存储过程时更改分隔符?

转载 作者:行者123 更新时间:2023-11-29 07:07:43 28 4
gpt4 key购买 nike

当我用 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 语句中使用 ; 定界符(我猜这可能是因为作用域)。

最佳答案

这会将语句分隔符更改为 $$ 以防止 MySQL 尝试将存储过程中的任何分号解释为分隔符。如果没有 DELIMITER $$,您将无法定义包含 ; 的存储过程来分隔其中的语句。您可以将其视为在过程定义期间全局转义分号的一种方式。

来自fine manual :

To redefine the mysql delimiter, use the delimiter command. The following example shows how to do this for the dorepeat() procedure just shown. The delimiter is changed to // to enable the entire definition to be passed to the server as a single statement, and then restored to ; before invoking the procedure. This enables the ; delimiter used in the procedure body to be passed through to the server rather than being interpreted by mysql itself.

我不知道我的解释是否比手册的更清楚,但也许其中之一(或两者结合)会导致一些理解。

关于mysql - 为什么 SQLYog 在创建 MySQL 存储过程时更改分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com