2011-04-05 113 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領域。