DELIMITER //
它有什么用?
它将语句分隔符从
;
更改为 //
。这样您就可以在触发器定义中写入 ;
,而 MySQL 客户端不会将其误解为表示您已经完成了。
请注意,改回来时,是
DELIMITER ;
,而不是我看到人们尝试做的 DELIMITER;
。
在 SQL 中,您使用分隔符结束每个语句,默认情况下为分号 (;)。在触发器中,您需要编写多个语句,每个语句以分号结尾。要告诉 MySQL 这些分号不是触发器语句的结尾,您可以暂时将分隔符从 ; 更改为 ; 。到//,这样MySQL就会知道触发器语句仅在它遇到//时结束。
添加示例:
在使用 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 ;
Simple 设置语句结束定界符(标准默认 SQL 中的
;
分号)。
如果您想在 SQL 中使用 ;
,或者您正在使用嵌入式 SQL(这可能会导致混乱),则更改字符可能会很有用。同样,示例中的 //
可能会导致嵌入式 SQL 中的混乱,或者您可能希望在 SQL 中使用它。因此,建议使用 DELIMITER
设置适合您的应用程序和需求的分隔符。
阅读(嗯)mysql 文档。
delimiter
是您发送到 mysql 命令行客户端的每个命令的结束标记。
delimiter
不仅与触发器相关,而且定义触发器和存储过程也是一个强大的用例,因为您希望它们包含分号 (;),否则这是默认值 delimiter
。
下面的分隔符命令将默认分隔符
;
更改为 //
。 *我的回答详细解释了分隔符:
DELIMITER //
因此,您可以使用
//
运行下面的 SQL 语句,但不能使用 ;
:
mysql> SELECT * FROM person//
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | David |
+----+-------+
然后,如果将分隔符
//
更改回 ;
:
DELIMITER ;
然后,您可以使用
;
运行下面的 SQL 语句,但不能使用 //
:
mysql> SELECT * FROM person;
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | David |
+----+-------+