我试图制作一个触发器,这样我就可以检查是否有任何负面插入的年龄。 我尝试了下面的查询,但它显示在下面错误。
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行
我在语法上做错了吗?
答案 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
这种替代方案没有特别的优势,我只是展示了另一种表达方式。