MYSQL分隔符什么时候有用?

时间:2018-07-19 16:11:21

标签: mysql

我正在编写SQL为数据库中的表创建触发器。这段代码应该放在一个脚本中,只要我们产生一个新数据库就可以运行该脚本。

我一直在阅读SQL文档,以了解如何执行此操作,最终想到了以下类型的查询:

DELIMITER $$
CREATE TRIGGER calendar_event_after_insert AFTER INSERT 
ON calendar_event
FOR EACH ROW
BEGIN
  IF @log_calendar_event_id = 'YES'
  THEN
    ...
  END IF;
  IF @log_calendar_event_name = 'YES'
  THEN
    ...
  END IF;
  ...
END
$$
DELIMITER ;

现在,我在使用DELIMITER时遇到了错误,并且我承认我不太了解它是如何工作的。我的基本理解是,由于在这个大查询中有多个查询都以;结尾,因此我需要使用另一个分隔符告诉sql该查询何时结束。

在阅读了一些关于定界符的内容后,这对我来说似乎是正确的语法,而且最重要的是,我一直在sequel pro中运行此查询,有时它有时会起作用(很奇怪,我知道)。

因此,最终我决定删除定界符部分,一切正常进行。我有点担心这会有副作用。

所以我的问题是:什么时候使用分隔符?它们对我有用吗?如果是这样,我在做什么错了?


根据评论的要求进行编辑

这是我在运行查询时遇到的错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   在“ DELIMITER $$创建触发器附近” calendar_event_after_insert AFTER之后   在第1行上插入“日历”

仅供参考,我们在开发机上安装了旧版本的MYSQL-MYSQL 5.1.73

1 个答案:

答案 0 :(得分:2)

DELIMITER不是SQL语言的一部分。这是command中的official command-line tool

  

如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql本身会将分号识别为语句定界符,因此您必须临时重新定义定界符,以使mysql将整个存储的程序定义传递给服务器。

     

要重新定义mysql分隔符,请使用delimiter命令。

有些第三方程序也实现了delimiter命令,以便能够运行复杂的MySQL脚本(例如HeidiSQL)。

如果您在不允许多个语句的上下文中运行脚本(例如,典型的PHP应用程序),则该命令将根本不存在,也根本不需要。