【问题标题】:Update Trigger on same table MySQL 5.6在同一张表 MySQL 5.6 上更新触发器
【发布时间】:2020-05-15 17:32:36
【问题描述】:

我有一张“foods”表,其中包含“featured”、“restaurant_id”、“retaurant_stock”列。 在条件下更新同一表上的“特色”列后,如何使用触发器或 mySQL 版本 5.6 上可用的任何其他解决方案更新列“restaurant_stock”? 计算列在 mySQL 版本 5.6 上不可用。

这是我的触发器:

CREATE TRIGGER update_restaurant_stock BEFORE UPDATE ON foods
OR EACH ROW
BEGIN
IF NEW.featured = 1 THEN
UPDATE `foods` SET NEW.restaurant_stock = (NEW.restaurant_id);
ELSE
UPDATE `foods` SET NEW.restaurant_stock = 0;
END IF;
END

现在,当我更新“精选”列时,我收到以下错误消息:

#1442 - Can't update table 'foods' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

感谢您的帮助!

【问题讨论】:

    标签: mysql database-trigger eventtrigger mysql-5.6


    【解决方案1】:

    你不能这样更新当前行,你可以使用 set 来改变新的值

    DELIMITER $$
    CREATE TRIGGER update_restaurant_stock BEFORE UPDATE ON foods
    OR EACH ROW
    BEGIN
    IF NEW.featured = 1 THEN
        SET NEW.restaurant_stock = (NEW.restaurant_id);
    ELSE
        SET NEW.restaurant_stock = 0;
    END IF;
    END$$
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:
      CREATE TRIGGER tr_bu_foods
      BEFORE UPDATE 
      ON foods
      FOR EACH ROW
      -- update restaurant_stock 
      SET NEW.restaurant_stock = NEW.restaurant_id * (NEW.featured = 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        • 2017-12-18
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多