【问题标题】:how to make a trigger for another table mysql如何为另一个表mysql创建触发器
【发布时间】:2021-03-15 10:06:13
【问题描述】:

我有两张桌子

第 1 章

id  product_id  quantity    status

第 2 章

id  product_id  status

用tbl1.product_id = tbl2.product_id,我想做一个触发器,所以如果我更新tbl1.product_id中的tbl1.status,那么它将自动更新tbl2.product_id的状态,具有相同的状态值

如果我们说桌子是这样的

tbl1

    +----+------------+----------+--------+
    | id | product_id | quantity | status |
    +----+------------+----------+--------+
    |  1 |         15 |        2 |      1 |
    |  2 |         16 |        4 |      1 |
    +----+------------+----------+--------+

tbl2

    +----+------------+--------+
    | id | product_id | status |
    +----+------------+--------+
    |  1 |         15 |      1 |
    |  2 |         16 |      1 |
    +----+------------+--------+

如果我想将 tbl1.product_id = 15 更新为 status = 0,那么 tbl2.product_id = 15 也会像这样变为 status = 0

tbl1
    
        +----+------------+----------+--------+
        | id | product_id | quantity | status |
        +----+------------+----------+--------+
        |  1 |         15 |        2 |      0 |
        |  2 |         16 |        4 |      1 |
        +----+------------+----------+--------+

    tbl2
    
        +----+------------+--------+
        | id | product_id | status |
        +----+------------+--------+
        |  1 |         15 |      0 |
        |  2 |         16 |      1 |
        +----+------------+--------+

【问题讨论】:

  • 链接行中不同的status 值是否有意义?如果不是,那么只需从依赖表中删除此列。 我有 2 个表将它们显示为完整的 CREATE TABLE 脚本。
  • 说来话长,但tbl1tbl2之前已经被制作了,tbl2基本上只是在tbl1中包含一些product_id,其中有status = 1。长话短说,有条件tbl1中的status会被更新,所以我需要触发器,当我更新tbl1中的状态时,它也会在tbl2中自动更新相同的product_id
  • 哦,是的,我忘了,tbl2 在所有表格中都包含product_id,包括tbl1,所以它应该是tbl2 中的另一列,以提供@987654341 所在的信息@来自,但我认为它与此案无关,因此我将其删除

标签: mysql triggers


【解决方案1】:
CREATE TRIGGER update_table2
AFTER UPDATE
ON table1
FOR EACH ROW
    UPDATE table2
    SET status = NEW.status
    WHERE product_id = NEW.product_id;

【讨论】:

  • 感谢您的回答,我想知道,我可以在ON table1 之后加上与table1 相关的条件的代码吗?所以可以说我想把AFTER UPDATE ON table1 WHERE table1.another_column = 'yes'
  • 所以当编辑在table1.another_column = no中完成后,触发器将不会被完成
  • @18818181881 将根据检查添加到 UPDATE 查询的 WHERE 子句中。 ... AND NEW.another_column = 'no'.
  • 所以我之前提到的格式对吗? AFTER UPDATE ON table1 WHERE table1.another_column = 'yes'
  • another_column 仅在 table1 中而不在 table2
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多