在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_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;
但是这也引发了语法错误。有谁能告诉我如何解决这个问题?
答案 0 :(得分:2)
SET NEW.picture_id := (SELECT picture_id FROM comments WHERE id = NEW.commend_id);