2012-07-03 230 views
2

我試圖寫一個觸發器來解決innodb auto_increment問題。我想讓orderID是auto_increment,但innodb不允許我。這是ORDER表Mysql觸發器#1064錯誤

CREATE TABLE IF NOT EXISTS `ORDER` (
    `placeID` INT UNSIGNED NOT NULL, 
    `orderID` INT UNSIGNED NOT NULL, 
    `userID` INT UNSIGNED NOT NULL , 
    `tableNum` SMALLINT NOT NULL, 
    `orderStatus` TINYINT NOT NULL, 
    `orderDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`placeID`,`orderID`), 
    FOREIGN KEY (`userID`) REFERENCES `USER` (`userID`), 
    FOREIGN KEY (`placeID`) REFERENCES `PLACE` (`placeID`)) 
ENGINE=InnoDB; 

這裏是觸發

delimiter $$ 
DROP TRIGGER /*!50032 IF EXISTS */ `ORDER_TRIGGER` $$ 
CREATE TRIGGER `ORDER_TRIGGER` BEFORE INSERT ON `ORDER` 
FOR EACH ROW 
BEGIN 
     DECLARE orderID INT UNSIGNED; 
    SELECT MAX(`orderID`) INTO orderID FROM `ORDER` WHERE `placeID` = NEW.placeID; 
     IF orderID IS NULL THEN 
      orderID = 1; 
     END IF; 
    SET NEW.orderID = orderID+1; 
END; 
$$ 
delimiter; 

當我執行這個腳本我得到這個錯誤。

#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 '= 1; 
     END IF; 
    SET NEW.orderID = orderID+1; 
END' at line 7 

有人能幫助我嗎?我看着谷歌,但我找不到準確的解決方案。

回答

2

我發現我的錯誤。這是正確的代碼。

delimiter $$ 
DROP TRIGGER /*!50032 IF EXISTS */ `ORDER_TRIGGER` $$ 
CREATE TRIGGER `ORDER_TRIGGER` BEFORE INSERT ON `ORDER` 
FOR EACH ROW 
BEGIN 
     DECLARE orderID INT UNSIGNED; 
     SELECT MAX(`ORDER`.`orderID`) AS ID INTO orderID FROM `ORDER` WHERE `ORDER`.`placeID` = NEW.placeID; 
     IF orderID IS NULL THEN 
      SET orderID = 0; 
     END IF; 
    SET NEW.orderID = orderID+1; 
END; 
$$