顯然,MySQL對於無法在爲同一表定義的觸發器內更新表的操作非常煩人。
我正在使用MySQL版本5.1並且出現錯誤:「無法更新存儲的函數/觸發器中的表,因爲它已被調用此函數的語句使用/觸發器」。MySQL:在自己的觸發器中更新表
我有這樣的:
create table folder(
id int unsigned not null auto_increment PRIMARY KEY ,
name varchar(100) not null ,
parentId int unsigned not null
) ;
這是一個分層文件夾結構。一個文件夾有一個名稱,可能還有一個父文件夾(如果沒有,則parentId
爲零)。
當文件夾被刪除時,我需要更改其中所有子文件夾的parentId
,以便它們不會成爲不存在文件夾的子文件夾。
這是相當簡單的(幾乎是微不足道的):
CREATE [email protected] TRIGGER onFolderDelete after delete ON folder
FOR EACH ROW update folder set parentId=0 where parentId=old.id ;
然而,這樣一個簡單的觸發器是不是由MySQL允許的,因爲正如我上面所說的,你不能在自己的觸發器中更新的表。
是否有任何方式通過以某種方式模仿其效果來實現這種觸發器?
P.S .:請不要建議順序發送兩個語句(DELETE和UPDATE)。如果沒有別的可能,這顯然是最後的解決方案。
編輯:
我使用MyISAM引擎(性能原因),所以我不能使用外鍵。
我使用的是不支持外鍵的MyISAM引擎。這是一個高流量的網站,所以MyISAM是由於性能原因而需要的。 – GetFree
好的,但你可能需要在你的問題中指定它.... – a1ex07
另外,我相信你可以有一個INNODB表... – a1ex07