2013-11-04 78 views
3

我有一個名爲倉庫爲我的數據庫表,它有Warehouse_idWarehouse和Warehouse_name作爲主鍵。我想要做的是有效地存儲最近N次對錶中存儲的每個倉庫進行的更改。我曾考慮過創建一個「助手」表(例如warehouse_changes)並通過我的應用程序處理更新,但老實說,感覺就像有一個更聰明的方法。什麼是最有效的方式來存儲mysql表最近的變化

是否有辦法爲每個倉庫存儲特定數量的條目並自動管理通過mysql工作臺更新正確的元素?提前致謝,請記住,我在這個領域並不是特別先進。

+0

這是什麼意思「是有沒有辦法爲每個倉庫存儲特定數量的條目,並通過mysql工作臺自動管理更新正確的元素?「?例如,你能描述一下理想情況下的工作方式嗎? (另外,我不明白數據庫術語中「元素」的含義。) – AgRizzo

+0

可能重複[這是創建審計跟蹤的最佳方法嗎?](http://stackoverflow.com/questions/711597/is-這是最好的方法來創建一個審計跟蹤) – ModulusJoe

+0

感謝您的快速回答!因此,請考慮您擁有倉庫表,其中條目隨時間收集(新條目通過應用程序插入)。理想情況下,對於倉庫表內的每個條目(這是我的意思是元素),我想要一種方式來存儲15個記錄,這些記錄是對這個倉庫進行的變化以及它存儲產品的能力。我希望最多15條記錄的數據「將添加到此倉庫」,或「將的移動到<倉庫名稱>」。 – Mark

回答

1

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; 
+0

感謝您的回答。但有一個問題:考慮到我想爲每個倉庫存儲相對少量的「日誌」,最多20個,這個解決方案不會佔用比必要的更多的空間嗎?我正在努力尋找最有效的解決方案。 – Mark

+0

就我所見,這是追蹤變化的最有效方式。您也可以從應用程序中執行此操作,並檢查日誌是否比所需時間長,但效率會降低。也許如果你擔心日誌需要的空間,你可以設置一個自動截斷腳本,每24小時運行一次查詢語句來清理不需要的條目。但這是一個不同的問題:) –

+0

當然。從一開始,這個討論在本質上有些學術性,因爲我正在做一個「模擬」而不是一個真正的基於數據庫的應用程序。但是,如果將來我想用這個更具體的東西,我顯然不得不考慮這些問題。我想我會用觸發器解決方案,這似乎是最可行和相對簡單的。謝謝你的幫助! – Mark

相關問題