创建触发器出错

时间:2011-04-05 20:53:56

标签: sql triggers

这是我想要创建的简单触发器:

CREATE TRIGGER add_item_id BEFORE INSERT ON products 
FOR EACH ROW
BEGIN
DECLARE max_id INTEGER;
SELECT MAX(item_id) INTO @max_id FROM products;
SET NEW.item_id = @max_id + 1;
END;

我在phpMyAdmin SQL窗口和mysql提示符下都尝试过,并得到如下错误:

#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 

2 个答案:

答案 0 :(得分:1)

delimiter //
CREATE TRIGGER add_item_id BEFORE INSERT ON products 
FOR EACH ROW
BEGIN
DECLARE max_id int;
SELECT MAX(item_id) INTO max_id FROM products;
SET NEW.item_id = max_id + 1;
END//
delimiter ;

一些注意事项:

  • 如果声明(局部变量)max_id,请使用它。 @max_id是一个GLOBAL变量。任何@variable都可以在不声明的情况下使用,但只要会话存在,它就会保留在会话中。
  • 您的代码很好,您只是错过了分隔符更改。如果没有delimiter //,MySQL会看到以..FROM PRODUCTS;结尾的CREATE TRIGGER语句,这会使其无效

答案 1 :(得分:0)

你也可以这样做:

CREATE TRIGGER add_item_id
  BEFORE INSERT
  ON products 
FOR EACH ROW
BEGIN
  SET NEW.item_id = 1 + ( SELECT MAX(item_id)
                          FROM products
                        ) ;
END;

注意:您可以在几乎所有RDBMS中声明auto_incremented字段。