显然,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