mysql — Автоматическое обновление вхождений в другой таблице

#mysql #sql #database #sql-update #sql-insert

#mysql #sql #База данных #sql-обновление #sql-вставка

Вопрос:

У меня есть две таблицы, одна для хранения отчетов пользователя, а другая для хранения пользователей.

 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 при вставке нового отчета?

Ответ №1:

Вы можете справиться с TRIGGER с помощью AFTER INSERT триггера

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

Комментарии:

1. Спасибо! Это то, что я искал!

Ответ №2:

Вам нужен триггер:http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html который должен срабатывать после каждой операции вставки в reports_table.

 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;
  

(Я не уверен, что синтаксис правильный. Я думаю, что триггер before insert также будет работать)

Комментарии:

1. вы должны изменить UPDATE на INSERT ON DUPLICATE KEY , если в users_table нет строки для этого пользователя.