MySQL UPDATE触发错误-无法更新语句已使用的表

时间:2019-02-16 20:05:52

标签: mysql triggers

我正在尝试设置一个MySQL触发器,该触发器将在表中的行更新时触发。发生这种情况时,它将检查以查看一列的新值,然后相应地设置另一列。当我测试它时,出现错误:

  

1442-无法更新存储函数/触发器中的表'opportunities2',因为调用该存储函数/触发器的语句已使用该表。

这是我的触发器:

BEGIN
    IF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND 
    NEW.opportunityOwnerRole LIKE '%one%'
    THEN 
        UPDATE opportunities2 SET NEW.opportunityProduct = 'one' 
        WHERE rowId = NEW.rowId;
    ELSEIF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND 
    NEW.opportunityOwnerRole NOT LIKE '%two%' 
    THEN
        UPDATE opportunities2 SET NEW.opportunityProduct = 'two'         WHERE rowId = NEW.rowId; 
    END IF; 
END

有什么想法吗?谢谢!

编辑:下面的正确答案,但是想要在任何人需要时发布固定的触发器:

BEGIN
    IF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND 
    NEW.opportunityOwnerRole LIKE '%one%'
    THEN 
        SET NEW.opportunityProduct = 'one';
    ELSEIF NEW.opportunityOwnerRole <> OLD.opportunityOwnerRole AND 
    NEW.opportunityOwnerRole NOT LIKE '%two%' 
    THEN
        SET NEW.opportunityProduct = 'two';
    END IF; 
END

1 个答案:

答案 0 :(得分:1)

触发器无法触发更新或将语句插入到调用触发器操作的表中。 您可以做的是在触发代码内(触发之前)操纵更新或插入语句

例如

IF NEW.opportunityRole <> OLD.opportunityRole
THEN
     SET NEW.opportunityRole = 'one';
END IF