DELIMITER // 在触发器中做什么?

问题描述 投票:0回答:6
DELIMITER //

它有什么用?

sql mysql database triggers delimiter
6个回答
86
投票

它将语句分隔符从

;
更改为
//
。这样您就可以在触发器定义中写入
;
,而 MySQL 客户端不会将其误解为表示您已经完成了。

请注意,改回来时,是

DELIMITER ;
,而不是我看到人们尝试做的
DELIMITER;


35
投票

在 SQL 中,您使用分隔符结束每个语句,默认情况下为分号 (;)。在触发器中,您需要编写多个语句,每个语句以分号结尾。要告诉 MySQL 这些分号不是触发器语句的结尾,您可以暂时将分隔符从 ; 更改为 ; 。到//,这样MySQL就会知道触发器语句仅在它遇到//时结束。


8
投票

添加示例:
在使用 mysql shell 命令时,我们使用

;
分隔符来结束每个语句。但是,如果我们想要构建存储过程和触发器,我们还需要在这些语句中添加分号
;

delimiter //
create trigger log_students after insert on students
for each row
  begin
    insert into log_students(change_by, change_at) values(USER(), NOW());
  end//
delimiter ;

1
投票

Simple 设置语句结束定界符(标准默认 SQL 中的

;
分号)。 如果您想在 SQL 中使用
;
,或者您正在使用嵌入式 SQL(这可能会导致混乱),则更改字符可能会很有用。同样,示例中的
//
可能会导致嵌入式 SQL 中的混乱,或者您可能希望在 SQL 中使用它。因此,建议使用
DELIMITER
设置适合您的应用程序和需求的分隔符。


0
投票

阅读(嗯)mysql 文档

delimiter
是您发送到 mysql 命令行客户端的每个命令的结束标记。

delimiter
不仅与触发器相关,而且定义触发器和存储过程也是一个强大的用例,因为您希望它们包含分号 (;),否则这是默认值
delimiter


0
投票

下面的分隔符命令将默认分隔符

;
更改为
//
。 *我的回答详细解释了分隔符:

DELIMITER //

因此,您可以使用

//
运行下面的 SQL 语句,但不能使用
;
:

mysql> SELECT * FROM person//
+----+-------+
| id | name  |
+----+-------+
|  1 | John  |
|  2 | David |
+----+-------+

然后,如果将分隔符

//
更改回
;

DELIMITER ;

然后,您可以使用

;
运行下面的 SQL 语句,但不能使用
//
:

mysql> SELECT * FROM person;
+----+-------+
| id | name  |
+----+-------+
|  1 | John  |
|  2 | David |
+----+-------+
© www.soinside.com 2019 - 2024. All rights reserved.