MySQL触发更新计数器由INSERT IGNORE INTO SELECT使用的parent_table

时间:2013-07-04 07:39:56

标签: mysql

我现在开始在我的db-structure中使用触发器。 我必须把桌子 - 我们称之为父母和孩子。 在插入cild表后调用触发器。 insert-Statement是

INSERT IGNORE INTO child (parent_id)
SELECT
    id
FROM parent
WHERE somecondition = 1

子表的插入后触发器中的语句是:

UPDATE parent SET derivate_count = derivate_count + 1;

父表没有触发更新或其他东西,我收到错误: SQL Fehler(1442):无法更新存储函数/触发器中的表'parent',因为它已被调用此存储函数/触发器的语句使用。

如果我在父表上强制执行相同的事件,我会理解是否会发生此错误 - 如何解决?

亲切的问候,

多米尼克

1 个答案:

答案 0 :(得分:0)

使用OLD.fieldName和NEW.fieldName分别引用更新前后的值...

delimiter |

CREATE TRIGGER testref AFTER UPDATE ON parent
  FOR EACH ROW BEGIN
   declare count_ integer;
   select count(*) into count_ from child where parent_id = NEW.id;
    if (if count_ = 0)
       then 
          INSERT INTO child ( parent_id ) values (NEW.id );
          delete from child where parent_id = OLD.id;
          ... more code ...
       else
          ... more code ....
          ... else is optional, but an end to end the if is not.... 
       end if;
  END;
|

delimiter ;