2012-09-24 228 views
0

我想知道是否有方法可以更新mysql中的记录,并且 仍然可以保留记录的前一个(更新前)数据,并且还保留更新历史记录计数器。更新记录并保留mysql中的先前记录数据

我应该能够使用上次更新记录作为真实记录。

帮助赞赏。

谢谢。

+1

如果您想保留历史记录,更新将不起作用。您需要插入,因为更新会覆盖以前的数据。我建议在创建记录的日期时间中添加一个字段'Timestamp'。这样,您的真实记录就是具有最高时间戳的记录。较旧的是历史。我将这种方法用于有一个变化字段的小表。考虑到数据冗余,可能不是考虑更大表格的最佳方法。 – Hazaart

+0

感谢伟大的洞察力。对于更大的桌子,你会有什么建议? – watkib

回答

2

我认为你不需要更新记录,而是Insert另一个记录,所以你以前的记录将不会被触及。

更新1

您需要为此创造两个表。第一个是data这是记录,另一个是保存它的表格发生变化。例如,

CREATE TABLE dataList 
(
    ID INT NOT NULL, 
    Name VARCHAR(30), 
    -- other fields... , 
    CONSTRAINT dl_pk PRIMARY KEY ID) 
); 

CREATE TABLE versionList 
(
    ID INT AUTO_INCREMENT, 
    DataID INT, 
    VersionID INT, 
    DateChanged datetime, 
    CONSTRAINT vl_pk PRIMARY KEY (ID), 
    CONSTRAINT vl_fk FOREIGN KEY (DataID) 
     REFERENCES dataList(ID) 
); 

INSERT INTO dataList(ID, Name) VALUES (1,'hello'); 
INSERT INTO dataList(ID, Name) VALUES (2,'world'); 

INSERT INTO versionList(DataID, VersionID, DateChanged) VALUES (1,1,'2011-01-01'); 
INSERT INTO versionList(DataID, VersionID, DateChanged) VALUES (1,2,'2011-02-01'); 
INSERT INTO versionList(DataID, VersionID, DateChanged) VALUES (1,3,'2011-03-01'); 
INSERT INTO versionList(DataID, VersionID, DateChanged) VALUES (2,1,'2012-01-01'); 
INSERT INTO versionList(DataID, VersionID, DateChanged) VALUES (2,2,'2012-02-01'); 
+0

谢谢,我有一个设置为独特的字段。所以不能有重复。我该如何解决这个问题? – watkib

+0

什么字段是唯一的? –

+0

@Hazaart创建另一个字段,引用前一个版本记录的关键字 – Hazaart