【问题标题】:triggers using multiple tables in mysql在mysql中使用多个表的触发器
【发布时间】:2017-01-09 09:42:47
【问题描述】:

我有三张桌子

ms_seller 表(seller_id - 主键)

seller_id  seller_status vacation_mode
   50             0            1

ms_product 表(product_id - 主键)

product_id    seller_id
     9           50
     2           50

产品表

product_id     date_modified
       2         2017-01-06 16:13:27
       9         2017-01-06 16:13:27

我的问题是

如果我要更新 ms_seller 表中的卖家状态或假期模式,则根据 Seller_id 50,我们将从 ms_product 表中选择 product_id,然后根据 product_id 2 和 9,我必须在产品表中更新由今天日期修改的日期

我正在尝试,但出现错误

CREATE TRIGGER trigger_vacation_mode
ON oc_ms_seller.vacation_mode
AFTER UPDATE
FOR EACH ROW
    UPDATE oc_product p
    SET p.date_modified = NOW()
    WHERE ID IN (SELECT DISTINCT product_id FROM oc_ms_seller ms join oc_ms_product mp ON ms.seller_id= mp.seller_id);

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON oc_ms_seller.vacation_mode
AFTER UPDATE
FOR EACH ROW
    UPDATE oc_product' at line 2

感谢您的建议

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    您收到的错误消息是因为您尝试在 field (oc_ms_seller.vacation_mode) 上声明触发器,但是,触发器适用于 tables

    有关详细信息,请参阅create trigger 上的 MySQL 文档:

    CREATE
        [DEFINER = { user | CURRENT_USER }]
        TRIGGER trigger_name
        trigger_time trigger_event
        ON **tbl_name** FOR EACH ROW
        [trigger_order]
        trigger_body
    

    但是,在您的触发器中,您应该在更新语句的 where 条件中使用 NEW.fieldname 引用,否则更新将更改所有匹配的记录。

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多