2012-09-24 230 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