Mysql
每當數據添加到另一個表時,如何自動更新表?
我在 MySQL 中創建了兩個表。一個 (
Todo_tbl
) 保存數據,而另一個 (Statistics_tbl
) 保存其中一個變數的總和Todo_tbl
。遵循這些表的定義:
create table Todo_tbl ( id INT auto_increment, person VARCHAR(45) , task VARCHAR(45) , duration INT(4), deadline_day VARCHAR(2), deadline_month VARCHAR(2), PRIMARY KEY(id) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; insert into Todo_tbl values(1,'John', 'dust the floors', 40,04,03); insert into Todo_tbl values(2,'Matt', 'do the dishes', 15,02,02); insert into Todo_tbl values(3,'Mary', 'dusting', 40,03,02); insert into Todo_tbl values(4,'Chloe', 'cleaning the windows', 75,04,05); insert into Todo_tbl values(5,'John', 'wash the floors', 60,03,03); insert into Todo_tbl values(6,'Bridget', 'take out the trash', 15,03,03); insert into Todo_tbl values(7,'Matt', 'do the laundry', 18,02,02); insert into Todo_tbl values(8,'Bridget', 'water the plants', 15,03,03); select * from Todo_tbl; create table Statistics_tbl ( SELECT person, SUM(duration) as total_duration FROM Todo_tbl GROUP BY person ); select * from Statistics_tbl;
問題是每當我將新數據添加
Todo_tbl
到Statistics_tbl
.有什麼辦法可以連接兩張表,這樣當一張表發生變化時,另一張表也會響應?
當你有一個非常好的查詢可以從原始表中得到相同的東西時,為什麼你需要一個表來保存統計資訊?
數據庫喜歡堅持一個被稱為“單一真理來源”的概念。
一個表(或一組)包含基本數據。如果那是錯誤的,那麼一切都是錯誤的。在這種情況下,這就是你的 todo_tbl。
如果您需要另一個必須與 todo_tbl 保持同步的表 - 但是已經完成了 - 那麼您將面臨兩者失步並歪曲事實的風險。
建議:在 Todo_tbl.person 上彈出一個索引(可能有助於分組)並使用您已經擁有的 select 語句來獲取統計資訊作為 View 的核心,該View可以直接從 Single Source of Truth 獲取統計數據。
CREATE VIEW statistics_v AS SELECT person , SUM( duration ) as total_duration FROM todo_tbl GROUP BY person ;