在Windows6.2上使用MySQL55,
DROP TRIGGER IF EXISTS `maxBBLimit`;
CREATE TRIGGER `maxBBLimit`
AFTER UPDATE ON locationobject
FOR EACH ROW
IF locationobject.boxLowY > 1000 THEN CALL RaiseException();
END IF;假设locationobject有一个名为boxLowY的无符号int变量,它只允许0到1000之间的值,如果它高于此范围,则调用RaiseException()。
由于以下错误,我的工作区拒绝编译:
17:43:40 CREATE TRIGGER `maxBBLimit` AFTER UPDATE ON locationobject FOR EACH ROW IF locationobject.boxLowY > 1000 THEN CALL RaiseException() Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 0.000 sec^这个在)下有一个红色的切换,在RaiseException(之后
17:43:40 ; END IF Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; END IF' at line 1 0.000 sec^这一个在END下面的END IF语句中有一个红色的切换;
有人对如何编译这段代码有任何建议吗?
发布于 2015-05-18 01:28:26
触发器定义应该被delimiter语句包围。
此外,还可以使用new引用触发器的表。你想要一个before update触发器。如果在update之后失败,坏值仍将进入数据库。而且,通常使用signal返回错误。所以,如果我没有错过什么:
DELIMITER $$
DROP TRIGGER IF EXISTS `maxBBLimit` $$
CREATE TRIGGER `maxBBLimit`
AFTER UPDATE ON locationobject
FOR EACH ROW
IF new.boxLowY > 1000 THEN
SIGNAL SQLSTATE '4500' SET MESSAGE_TEXT = 'boxLowY out of range';
END IF$$
DELIMITER ;https://stackoverflow.com/questions/30293671
复制相似问题