mysql - mysql中使用多个表的触发器

标签 mysql triggers

我有三张 table

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

感谢您的建议

最佳答案

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

请参阅 MySQL 文档 create trigger详情:

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 引用,否则更新将更改所有匹配的记录。

关于mysql - mysql中使用多个表的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544975/

相关文章:

sql - SQL插入触发器

sql - 索引 View 更新时

MySQL_如何对另一列上具有相同值的每两列中的值求和?

MYSQL查询获取一列在不同组中多次出现并符合特定条件的所有结果

mysql - 在 Python 中使用 mysql.connector 执行 MySQL 触发器,该触发器计算值并将其插入到现有表中新创建的列中

MySQL 触发器组合两个事件

mysql - 我的 SQL 语法有问题

php - 在 MySQL+PHP 中过滤数据库表的搜索以获得每次搜索最接近的结果

java - Spring - hibernate -org.hibernate.TransientObjectException:对象引用了一个未保存的临时实例

mysql - sql触发器将行插入到两个表中