2013-03-25 135 views
0

我在SQL領域很安靜。因此我有一種工作方式的問題。MySQL存儲:歸檔數據的最佳方式

每個星期,我都會通過一個pHp代碼從我的MySQL DB上的Excel電子表格發送數據。這已經在工作。因此我有一張桌子可以更新。

其實我是在我的數據庫中發送特定底層的價格。以下是將數據存檔的最佳方式。

在我的數據庫,我有以下結構:

tabe t_index 
Label = VARCHAR(255) 
Price = float 
Date = date() 

比方說,我把我的數據在上週我的數據庫,所以我存儲:

Stock A 
102.85 
2013-03-18 

今天,我想送新價格爲Stock A這是103.54,但我想存檔並保持102.85價格能夠賺取一些回報或任何兩個價格之間。

我該如何繼續?

我希望我的問題是不是太亂了...... 謝謝您的幫助,這樣做就是創建一個UPDATE觸發器這在另一個表中插入舊值的

回答

4

的一種方式。因此,當您更新現有條目時,舊數據將被複制/存檔到另一個表中。

CREATE TABLE t_index_archive (
Label VARCHAR(255), 
Price float, 
Date datetime); 

現在在你現有的表上創建觸發器

DROP TRIGGER IF EXISTS archive_t_index; 
DELIMITER $$ 
CREATE DEFINER = CURRENT_USER TRIGGER archive_t_index BEFORE UPDATE ON t_index 
    FOR EACH ROW BEGIN 
      INSERT INTO t_index_archive VALUES (OLD.Label, OLD.Price, OLD.Date); 
    END; 
$$ 
DELIMITER ; 
+0

我們不能加一個標誌cloumn做在同一個表? – Hardik 2013-03-25 11:18:54

+0

有很多不同的方法來做同樣的事情。這裏的問題是將數據歸檔,這意味着,這些數據僅用於歷史目的,不會用於實時顯示。另外,如果我們將舊數據保留在表中,則會在表中累積大量數據時增加表掃描。 – Amit 2013-03-25 12:39:06

0

您可以用價值active,inactive

添加一個名爲像is_active ENUM類型的另一列默認情況下is_active的價值將是'active'

並且當您在數據庫中輸入新條目時只更新舊條目的is_active'inactive',然後添加新條目

使用查詢獲取新數據使用WHERE子句WHERE is_active='active'

相關問題