0
問:
什麼是選擇列值轉換成UPDATE
/INSERT
觸發NEW
變量時使用正確的語法?複製單個值
詳情:
這裏是[簡化]表我使用以及查詢。爲了這個例子的目的,我選擇了一些遞歸的東西,在這種情況下是一個評論(即,一個人可以評論一張圖片,但也可以評論)。在任何時候,我都想知道評論是在評論什麼圖片,但我不希望查詢表格n次以得到該圖片(因此我拒絕Adjacency List Model),所以我在插入時觸發了一個觸發器複製目標圖片。
PICTURES表:
CREATE TABLE IF NOT EXISTS pictures
(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)
comments表:
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;
但是,這也提出了一個語法錯誤。誰能告訴我如何解決這個問題?
只是出於好奇,如果'SELECT'返回多個值(即''id'不是'UNIQUE')會發生什麼?宇宙會崩潰嗎? – puk
@puk:你會得到一個錯誤,它不是指望有多個值,而是不能逐字記住我的頭頂。 – eggyal