Mysql

每當數據添加到另一個表時,如何自動更新表?

  • February 7, 2022

我在 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_tblStatistics_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 ; 

引用自:https://dba.stackexchange.com/questions/307078