0

このページとこのサイトの他の投稿を参照して、次のコードを機能させることができません。テーブル A が更新されるたびにテーブル B にレコードを挿入するトリガーを作成する必要があります。以下のコードは、私が試みていることを示しています。ただし、これにより構文エラーが発生します (#1064)。「DELIMITER $$」構文を含める必要があるかどうかについても不明です。私はあなたの助けに感謝します

DELIMITER $$
CREATE TRIGGER MyTrigger
AFTER INSERT
ON TableA
FOR EACH ROW 
BEGIN
    INSERT INTO TableB SET 
    TableA_id = NEW.TableB_id, 
    TableA_date = NEW.TableB_date,
    TableA_comment = NEW.TableB_comment;
  END;
END $$
DELIMITER ;

EDIT : 上記の擬似コードでは、 $TableName_$FieldName 規則を使用して、列 A がテーブル A に属し、列 B がテーブル B に属していることを示しています。元の質問でそれをより明確にする必要がありました。誰かが下にコメントしましたが、NEW インジケーターが間違った側にあります (表 A にあるはずです) が、そのコメントは削除されたようです。誰か確認してくれませんか?ご助力いただきありがとうございます

4

2 に答える 2

1

これを試して:

DELIMITER $$
CREATE TRIGGER MyTrigger
AFTER INSERT
ON TableA
FOR EACH ROW 
BEGIN
    INSERT INTO TableB SET 
    TableB_id = NEW.TableA_id, 
    TableB_date = NEW.TableA_date,
    TableB_comment = NEW.TableA_comment;
END $$
DELIMITER ;

hereは、実際のコマンド終了ではなく、定義の一部としてDELIMITER以下のすべてを処理するようにmysqlに指示するために使用されます。;

END;クロージングの直前に比類のないものを削除したことに注意してくださいEND $$

于 2012-08-30T14:45:20.473 に答える
1

トリガーにエラーEND;があります(すべてENDが a とペアになっている必要がありますBEGIN)。

さらに言えば、トリガーにはステートメントが 1 つしか含まれていないため、ブロックも必要ありませんBEGIN ... END(また、そのブロックが省略されている場合は、ステートメントCREATE TRIGGERにセミコロンが表示されないため、ステートメント区切り文字を変更する必要さえありません)。

CREATE TRIGGER MyTrigger AFTER INSERT ON TableA FOR EACH ROW 
  INSERT INTO TableB SET 
    TableA_id = NEW.TableB_id, 
    TableA_date = NEW.TableB_date,
    TableA_comment = NEW.TableB_comment
于 2012-08-30T14:47:33.433 に答える