在MySQL触发器中将查询中的单个值复制到NEW列/变量中

时间:2012-05-07 20:21:59

标签: mysql

问题:

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

详细说明:

以下是我正在使用的[简化]表以及查询。出于这个例子的目的,我选择了一些递归的东西,在这种情况下是一个注释(即,一个可以对图片进行评论,但也可以对评论进行评论)。在任何给定的时间我想知道评论评论的是什么图片,但我不想查询表格n次以获得该图片(因此我拒绝Adjacency List Model),所以我有插入时触发器复制目标图片。

PICTURES表:

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 )
)

评论触发器:请注意,NEW.comment_idNEW.picture_idNOT 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;

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

1 个答案:

答案 0 :(得分:2)

SET NEW.picture_id := (SELECT picture_id FROM comments WHERE id = NEW.commend_id);