触发器在mysql中使用多个表

时间:2017-01-09 09:42:48

标签: mysql triggers

我有三张桌子

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表中更新卖家状态或vacation_mode,那么根据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

感谢任何建议

1 个答案:

答案 0 :(得分:0)

您收到的错误消息来自于您尝试在字段oc_ms_seller.vacation_mode)上声明触发器,但是,触发器适用于表格

有关详细信息,请参阅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

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