2013-03-25 138 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'

相关问题