MySQL 触发器声明中缺少“冒号”错误

Posted

技术标签:

【中文标题】MySQL 触发器声明中缺少“冒号”错误【英文标题】:Missing 'colon' error in MySQL Trigger declaration 【发布时间】:2017-07-29 11:41:41 【问题描述】:

大家好,首先感谢您的耐心和帮助!

我在 mysql 中创建触发器时卡住了(我在 Ubuntu 16.10 上使用 MySQL WorkBench 6.3)。

代码如下:

CREATE TRIGGER check_device 
BEFORE INSERT ON dummyPT_data.devices
FOR EACH ROW
BEGIN
    IF (NEW.dtype != "HOST" && NEW.ipaddr != NULL || NEW.netmask != NULL || NEW.dfgateway != NULL)
    THEN raise_application_error(-20001,'The device type is uncompatible with data inserted');
    END IF;
END;

代码编辑器在函数raise_application_error 下划线并说:Syntax error: missing 'colon'

我在文本中找不到任何错误。我希望你能帮助我。

【问题讨论】:

好的,我已经编辑了代码。现在看起来像这样:DELIMITER $$ CREATE TRIGGER check_device BEFORE INSERT ON dummyPT_data.devices FOR EACH ROW BEGIN IF (NEW.dtype != "HOST" && NEW.ipaddr IS NOT NULL || NEW.netmask IS NOT NULL || NEW.dfgateway IS NOT NULL) THEN raise_application_error(-20001,'The device type is uncompatible with data inserted'); END IF; END$$ DELIMITER; 我得到同样的错误加上结束 DELIMITER 关键字的错误,它说 Syntax error: DELIMITER (identifier) is not valid input in this position 【参考方案1】:

跳到我的明显语法错误

!= NULL 

应该是

IS NOT NULL

除了这个之外,用 DELIMITER 包裹你的触发器

【讨论】:

【参考方案2】:

可能是分隔符的问题,你改了吗?

看看这个

Unable to Run Query in MySQL syntax error unexpected

如果你改变你的分隔符,你必须把新的分隔符放在最后一个END

DELIMITER $$
CREATE TRIGGER check_device 
BEFORE INSERT ON dummyPT_data.devices
FOR EACH ROW
BEGIN
 IF (NEW.dtype != "HOST" && NEW.ipaddr != NULL || NEW.netmask != NULL || NEW.dfgateway != NULL)
 THEN raise_application_error(-20001,'The device type is uncompatible with data inserted');
END IF;
END$$
DELIMITER ;

【讨论】:

以上是关于MySQL 触发器声明中缺少“冒号”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql触发器中声明If语句

将 Oracle 触发器转换为 MySql 触发器

Firebase Cloud Functions Firestore 触发器产生:错误:7 PERMISSION_DENIED:缺少权限或权限不足

Mysql 触发器在循环前声明

MySQL 触发器 - 将 SELECT 存储在变量中

在触发器中声明和使用变量