问题:
将列值选择到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;
但这也引发了语法错误。谁能告诉我如何解决这个问题?