2

innodbauto_incrementの問題を解決するためのトリガーを作成しようとしています。orderIDをauto_incrementにしたいのですが、innodbでは許可されていません。これがORDERテーブルです

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 

誰か助けてもらえますか?グーグルを見ましたが、正確な解決策が見つかりません。

4

1 に答える 1

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;
$$
于 2012-07-04T08:19:58.950 に答える