2017-11-22 3 views
-2

トリガーに問題があります。新しいreturnBikeがnullでない場合、値をfalseに変更したいと思います。IFでのMysqlトリガーエラー

CREATE TRIGGER returnBikeTrigger 
AFTER UPDATE ON Rent 
FOR EACH ROW 
    IF (NEW.returnBike <> null) THEN 
     UPDATE Bike SET isRented = false 
     WHERE id = (select Bike from Rent); -- but there is Error (missing semicolon) 
     END IF; 

アドバイスはありますか?

+0

は、このトリガは正しいですか?あなたは間違っていると見なしています。 –

+1

また、 'NULL 'に' <> '演算子を使うことはできません。あなたが 'IF(New.returnBike IS NOT NULL)'をしたい場合 –

+0

これより前の私のトリガでは比較がうまくいきました。それでも私のトリガーにIF/THENを使用すると、セミコロンが見つからないという文法に問題があります。 – Slideroh

答えて

0

私はちょうど行うに傾斜させることになります。

DELIMITER $$  
CREATE TRIGGER returnBikeTrigger 
AFTER UPDATE ON Rent 
FOR EACH ROW 
BEGIN 
    UPDATE Bike 
     SET isRented = false 
    WHERE id = new.Bike AND NEW.returnBike IS NOT NULL; 
END; $$ 
DELIMITER ; 
+0

私は 'if'を除外し、 'where'パラメータで同じものを使うことができます。ありがとう – Slideroh

0
DELIMITER $$  
CREATE TRIGGER returnBikeTrigger 
AFTER UPDATE ON Rent 
FOR EACH ROW 
BEGIN 
    IF (NEW.returnBike IS NOT NULL) THEN 
     UPDATE BikeSET isRented = false 
     WHERE id = new.Bike; 
    END IF; 
END; $$ 
DELIMITER ; 

したがって、セミコロンで区切られた区切り記号と$$で区切られた構文の問題を取り除くことができます。 とにかく、比較して、私にいくつかのアドバイスをくれてありがとう!