日期:2014-05-16  浏览次数:20895 次

求教数据库触发器
我在的目的是在更新完表a的一个字段m后将该更新的行转移到其他的一个表中然后删除本表的这个行
代码如下
CREATE TRIGGER `removeoffline` AFTER UPDATE ON `radacct` FOR EACH ROW if not isnull(new.acctstoptime) then
call AcctToAcct2(new.radacctid);
end if;

存储过程如下AcctToAcct2
CREATE PROCEDURE `AcctToAcct2`(id varchar(64))
BEGIN
INSERT INTO radacct2 (SELECT * FROM radacct WHERE radacct.radacctid = id);
delete FROM radacct WHERE radacct.radacctid = id;
END

在触发的时候出现了如下的错误提示
Err] 1442 - Can't update table 'radacct' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

请问问题出在哪里呀?


------解决方案--------------------
mysql语法不允许触发器内再更新本表 换种方法吧
------解决方案--------------------
CREATE TRIGGER `removeoffline` AFTER UPDATE ON `radacct` FOR EACH ROW if not isnull(new.acctstoptime) then
call AcctToAcct2(new.radacctid);
end if;

存储过程如下AcctToAcct2
CREATE PROCEDURE `AcctToAcct2`(id varchar(64))
BEGIN
INSERT INTO radacct2 (SELECT * FROM radacct WHERE radacct.radacctid = id);
delete FROM radacct WHERE radacct.radacctid = id;
END


出现递归触发了,MYSQL不支持。