InnoDBでMySQL 5.5.9で動作します。MySQLトリガー構文エラー
私は、次のトリガーを作成しました:
CREATE TRIGGER TRIGGER_Products_Insert
AFTER INSERT ON Products
FOR EACH ROW
BEGIN
UPDATE Products
SET current = 0
WHERE id = new.id
AND current = 1
AND autonumber <> new.autonumber
END;
MySQLWorkbenchは、最後の行に構文エラーを示しており、これを実行すると、次のエラー
エラーコードスロー:1064あなたがでエラーが発生しているがあなたのSQL構文。右側の構文が行11で 'END'近くで使用するようにMySQLサーバーのバージョンに対応するマニュアルを確認してください。
ここで私のエラー
これはうまくいきますが、なぜ「DELIMITER」が必要なのかわかりません。 –
'BEGIN ... END'はトリガの"ボディ "です。したがって、現在のクエリの一部でなければなりません。 ';'はデフォルトで区切り文字であるため、MySQLがそれに達すると、これはクエリの終わりであり、解析できません。また、別の方法で無効になるため、デリミタをトリガの "ボディ"に配置する必要があります。したがって、この要件を満たすためには、トリガーの「本体」とそれ自身の照会に2つの異なる区切り文字を使用する必要があります。申し訳ありませんが、私の英語はあまりにも明白ではない明らかに説明するにはあまりにも悪いです... – Timur
これはここでよりよく説明されています:http://dev.mysql.com/doc/refman/5.5/en/begin-end.html(3段落、 「複数のステートメントを使用するにはクライアントが対応可能でなければならない」というものから始まる) – Timur