我有一個名爲倉庫爲我的數據庫表,它有Warehouse_idWarehouse和Warehouse_name作爲主鍵。我想要做的是有效地存儲最近N次對錶中存儲的每個倉庫進行的更改。我曾考慮過創建一個「助手」表(例如warehouse_changes)並通過我的應用程序處理更新,但老實說,感覺就像有一個更聰明的方法。什麼是最有效的方式來存儲mysql表最近的變化
是否有辦法爲每個倉庫存儲特定數量的條目並自動管理通過mysql工作臺更新正確的元素?提前致謝,請記住,我在這個領域並不是特別先進。
我有一個名爲倉庫爲我的數據庫表,它有Warehouse_idWarehouse和Warehouse_name作爲主鍵。我想要做的是有效地存儲最近N次對錶中存儲的每個倉庫進行的更改。我曾考慮過創建一個「助手」表(例如warehouse_changes)並通過我的應用程序處理更新,但老實說,感覺就像有一個更聰明的方法。什麼是最有效的方式來存儲mysql表最近的變化
是否有辦法爲每個倉庫存儲特定數量的條目並自動管理通過mysql工作臺更新正確的元素?提前致謝,請記住,我在這個領域並不是特別先進。
有a very detailed article on O'Reilly Answers,它描述瞭如何使用觸發器來完成你想要的。
當用兩個詞來解釋時,您需要爲每個要存儲的操作類型創建一個輔助表和觸發器。例如,這裏的更新觸發的外觀根據這篇文章,如:
-- Creating a trigger that will run after each update
-- for each affected row
CREATE TRIGGER au_warehouse AFTER UPDATE ON Warehouse FOR EACH ROW
BEGIN
-- Insert new values into a log table, or you can insert old values
-- using the OLD row reference
INSERT INTO warehouse_log (action, id, ts, name)
VALUES('update', NEW.id, NOW(), NEW.name);
END;
那之後,你可以使用一個簡單的SQL查詢獲取最新的1000點的變化:
SELECT * FROM warehouse_log ORDER BY ts DESC LIMIT 1000;
感謝您的回答。但有一個問題:考慮到我想爲每個倉庫存儲相對少量的「日誌」,最多20個,這個解決方案不會佔用比必要的更多的空間嗎?我正在努力尋找最有效的解決方案。 – Mark
就我所見,這是追蹤變化的最有效方式。您也可以從應用程序中執行此操作,並檢查日誌是否比所需時間長,但效率會降低。也許如果你擔心日誌需要的空間,你可以設置一個自動截斷腳本,每24小時運行一次查詢語句來清理不需要的條目。但這是一個不同的問題:) –
當然。從一開始,這個討論在本質上有些學術性,因爲我正在做一個「模擬」而不是一個真正的基於數據庫的應用程序。但是,如果將來我想用這個更具體的東西,我顯然不得不考慮這些問題。我想我會用觸發器解決方案,這似乎是最可行和相對簡單的。謝謝你的幫助! – Mark
這是什麼意思「是有沒有辦法爲每個倉庫存儲特定數量的條目,並通過mysql工作臺自動管理更新正確的元素?「?例如,你能描述一下理想情況下的工作方式嗎? (另外,我不明白數據庫術語中「元素」的含義。) – AgRizzo
可能重複[這是創建審計跟蹤的最佳方法嗎?](http://stackoverflow.com/questions/711597/is-這是最好的方法來創建一個審計跟蹤) – ModulusJoe
感謝您的快速回答!因此,請考慮您擁有倉庫表,其中條目隨時間收集(新條目通過應用程序插入)。理想情況下,對於倉庫表內的每個條目(這是我的意思是元素),我想要一種方式來存儲15個記錄,這些記錄是對這個倉庫進行的變化以及它存儲產品的能力。我希望最多15條記錄的數據「將的添加到此倉庫」,或「將的移動到<倉庫名稱>」。 –
Mark