int*_*_32 2 mysql sql triggers
我有一个类别表,其中"订单"列用于订购类别.我试图在插入之前在触发器中逐步设置顺序:
CREATE TRIGGER `categories_set_order` BEFORE INSERT ON `categories` FOR EACH ROW BEGIN
DECLARE max_order INT DEFAULT 0;
SELECT MAX(categories.order) INTO max_order FROM categories;
SET NEW.order = max_order + 1;
END;
Run Code Online (Sandbox Code Playgroud)
但是如果db中没有记录,则将order列设置为NULL.我修改了触发器代码:
CREATE TRIGGER `categories_set_order` BEFORE INSERT ON `categories` FOR EACH ROW BEGIN
DECLARE max_order INT DEFAULT 0;
SELECT MAX(categories.order) INTO max_order FROM categories;
IF (ISNULL(@max_order)) THEN BEGIN
SET max_order = 0;
END;
SET NEW.order = max_order + 1;
END;
And I'm getting the following error:
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 9
Run Code Online (Sandbox Code Playgroud)
第9行是:
如果(ISNULL(@max_order))那么开始
我试图删除"@",但仍然得到相同的错误.怎么解决?
您需要更改分隔符.否则,DB认为您的触发器定义在第一个结束时结束,;这将是不完整的.
同时BEGIN从您的IF语句中删除并添加用于END IF结束您的语句IF
delimiter |
CREATE TRIGGER `categories_set_order` BEFORE INSERT ON `categories`
FOR EACH ROW BEGIN
DECLARE max_order INT DEFAULT 0;
SELECT MAX(categories.order) INTO max_order FROM categories;
IF (ISNULL(@max_order)) THEN
SET max_order = 0;
END IF;
SET NEW.order = max_order + 1;
END
|
delimiter ;