【问题标题】:mysql - Automatically update occurrences in another tablemysql - 自动更新另一个表中的事件
【发布时间】:2014-07-01 12:04:07
【问题描述】:

我有两张表,一张用于存储用户的报告,另一张用于存储用户。

1. Report_table
-----report_id(P)-----user_id--------
        001           user1
        002           user1 
        003           user3


2.Users table 
-------user_id(P)-------no_of_reports
        user1             2
        user2             0
        user3             1 

现在每当在 report_table 中插入报告(比如 report_id:004,user_id:user1),我都会像这样更新两个表。

INSERT INTO reports_table VALUES (004,`user1`)
INSERT INTO users_table  (user_id,no_of_reports) VALUES (`user1`,1)
  ON DUPLICATE KEY UPDATE no_of_reports=no_of_reports+1;

有没有更好的方法来做到这一点.. 有没有办法在插入新报告时自动递增 no_of_reports 计数器?

【问题讨论】:

    标签: mysql sql database sql-update sql-insert


    【解决方案1】:

    您可以使用AFTER INSERT 触发器来处理TRIGGER

    http://dev.mysql.com/doc/refman/5.0/en/triggers.html

    【讨论】:

    • 谢谢!这就是我要找的东西!
    【解决方案2】:

    您需要一个触发器:http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html,它应该在对报告表的每次插入操作后触发。

    CREATE TRIGGER update_report_cnt AFTER INSERT ON reports_table
    FOR EACH ROW
       BEGIN
          UPDATE users_table SET no_of_reports = no_of_reports + 1 where user_id = NEW.user_id;
       END;
    

    (我不确定语法是否正确。我认为插入前触发器也可以)

    【讨论】:

    • 如果 users_table 中没有此用户的行,您必须将 UPDATE 更改为 INSERT ON DUPLICATE KEY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多