2011-04-05 111 views
0

这是一个简单的触发我试图创建:错误创建触发器

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 

回答

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_i d,使用它。 @max_id是一个GLOBAL变量。任何@variable都可以在没有声明的情况下使用,但只要会话存在,它就会保留在会话中。
  • 你的代码很好,你只是缺少分隔符的改变。如果没有delimiter //,MySQL的看到在..FROM PRODUCTS;结束CREATE TRIGGER语句,这使得它无效
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领域。