0

问题:

将列值选择到UPDATE/INSERT触发器NEW变量时使用的正确语法是什么?

细节:

这是我正在使用的 [simplified] 表以及查询。为了这个例子的目的,我选择了递归的东西,在这种情况下是评论(即,一个人可以评论图片,也可以评论评论)。在任何给定时间,我都想知道评论在评论什么图片,但我不想查询表 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;

但这也引发了语法错误。谁能告诉我如何解决这个问题?

4

1 回答 1

2
SET NEW.picture_id := (SELECT picture_id FROM comments WHERE id = NEW.commend_id);
于 2012-05-07T20:25:12.023 回答