MySQL 1422,触发器中不允许显式或隐式提交

时间:2015-09-10 06:31:30

标签: mysql stored-procedures

我知道我不能在触发器内执行事务,但我可以在一个过程中执行。我应该能够从触发器调用一个过程。这正是我正在做的事情。

表A具有“更新后触发器”。 我只想在两列中的一列被更改的情况下调用该过程。

表A TRIGGER:

IF (
    NEW.colA != OLD.colA
OR
    NEW.colB != OLD.colB
) THEN
    call setBonuses( NEW.colA, NEW.colB );
END IF

setBonuses SP通过使用TABLE_A.colA,TABLE_A.colB进行一些计算来影响表B(我不认为它是相关的,但是表B确实有一个“更新后的触发器”,但是它有一个条件只做如果不受以下程序影响的字段发生更改,则更新,因此当奖励字段更新时,它“没有”。)

存储过程:

begin

    IF A > B THEN
        SET n = A;
        ...
    ELSEIF A < B THEN
        SET n = B;
        ...
    END IF;

    start transaction;

    -- Bonuses
    UPDATE TABLE_B
    SET bonus = 0
    WHERE... ;

    UPDATE TABLE_B
    SET bonus = bonus + n
    WHERE...;

    UPDATE TABLE_B
    SET bonus = bonus + n
    WHERE...;

    UPDATE TABLE_B
    SET bonus = bonus + n
    WHERE...;

    UPDATE TABLE_B
    SET bonus = bonus + n
    WHERE...;

    UPDATE TABLE_B
    SET bonus = bonus + n
    WHERE...;

commit;
end

如果应用程序直接调用SP,SP工作正常,但是,我不想在某些情况下显式地将其称为链,我真的只需要它来执行其计算并更新表B - 每当有人改变了表A(colA或colB)。

任何不可能的原因。

0 个答案:

没有答案