使用触发器时执行无限循环

时间:2012-09-10 07:29:38

标签: mysql triggers infinite-loop

我正在使用以下代码:

DELIMITER $$
DROP TRIGGER IF EXISTS after_insert_temp_ecs $$
CREATE 
    TRIGGER `after_insert_temp_ecs` AFTER insert ON `ecs` 
    FOR EACH ROW BEGIN
set @count =1;
WHILE(@count<=NEW.installments) THEN
insert into temp_ecs (amount_temp,_date_temp,id,name,installments) values(NEW.amount,(date_add(NEW._date,interval @count month)),NEW.id,NEW.name,NEW.installments);
set @count=@count+1;
END WHILE;
END;
$$
DELIMITER ;

但是当我使用它时无限循环执行。代码中的错误是什么

1 个答案:

答案 0 :(得分:1)

我们假设NEW.installments = 1。现在考虑这个块

set @count =1;
WHILE(@count<=NEW.installments) THEN
insert into temp_ecs (amount_temp,_date_temp,id,name,installments) values(NEW.amount,(date_add(NEW._date,interval @count month)),NEW.id,NEW.name,NEW.installments);
set @count=@count+1;
END WHILE;

触发器将再插入一条记录,然后@count将增加到2,while条件将不再保持(WHILE(@count<=NEW.installments))并且触发器将完成。

请注意,触发器插入了一个新行,NEW.installments = 1。对于这个额外的行,触发器将再次运行,将再插入一行,并且这将永远持续下去。