質問:
UPDATE
列の値を/INSERT
トリガーNEW
変数に選択するときに使用する正しい構文は何ですか?
詳細:
以下は、私が使用している[簡略化された]テーブルとクエリです。この例では、再帰的なものを選択しました。この場合はコメントです (つまり、画像だけでなく、コメントにもコメントできます)。いつでもコメントがコメントしている画像を知りたいのですが、その画像に到達するためにテーブルをn回クエリしたくないので(したがって、隣接リストモデルを拒否する理由)、トリガーがあります挿入時にターゲット画像をコピーします。
写真テーブル:
CREATE TABLE IF NOT EXISTS pictures
(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY ( id )
)
コメント表:
CREATE TABLE IF NOT EXISTS comments
(
id INT NOT NULL AUTO_INCREMENT,
picture_id INT NOT NULL,
comment_id INT NOT NULL,
PRIMARY KEY ( id ),
FOREIGN KEY ( picture_id ) REFERENCES pictures ( id ),
FOREIGN KEY ( comment_id ) REFERENCES comments ( id )
)
COMMENTS トリガー:NEW.comment_id
およびNEW.picture_id
はNOT NULL
であるため、デフォルトでゼロ ( ) に設定されていることに注意してくださいFALSE
。私の実際のプログラムではXOR
、画像とコメント ID の両方を割り当てる無効な試みを拒否する必要があります。
CREATE TRIGGER bi_comments_fer BEFORE INSERT ON comments FOR EACH ROW
BEGIN
IF ( NEW.comment_id )
THEN
select NEW.picture_id := picture_id from comments where id = NEW.comment_id;
END IF;
END
こんな@
風に記号を入れてみました
select @NEW.picture_id := picture_id from comments where id = NEW.comment_id;
しかし、それも構文エラーを引き起こしました。誰でもこれを修正する方法を教えてもらえますか?