maql db中的mysql触发器语法错误

时间:2018-02-19 16:56:20

标签: mysql triggers mysql-error-1064

我试图制作一个触发器,这样我就可以检查是否有任何负面插入的年龄。 我尝试了下面的查询,但它显示在下面错误。

CREATE TRIGGER agecheck 
    BEFORE INSERT ON people
FOR EACH ROW
BEGIN
    (CASE WHEN people.age  > 0 THEN  people.age ELSE 0 END )
END

错误代码:

  

#1064 - 您的SQL语法出错;检查与您的MariaDB服务器版本对应的手册,以便在'CASE WHEN people.age>附近使用正确的语法。 0那么1 ELSE 0 END)   结束'第5行

我在语法上做错了吗?

1 个答案:

答案 0 :(得分:0)

触发器中的声明不是声明。这只是一个表达。这不是你可以单独用作声明的东西。

我只是猜测你要做什么:确保age不是负面的。您可以通过将列声明为TINYINT UNSIGNED来实现此目的,但如果您想使用触发器执行此操作:

FOR EACH ROW
BEGIN
    SET NEW.age = CASE WHEN NEW.age > 0 THEN NEW.age ELSE 0 END;
END

在触发器中,始终使用NEW.<columnname>OLD.<columnname>引用相应触发行的列。

另一个同样有效的表达方式:

FOR EACH ROW
BEGIN
    SET NEW.age = GREATEST(NEW.age, 0);
END

这种替代方案没有特别的优势,我只是展示了另一种表达方式。