2012-09-24 3 views
0

mysql에서 레코드를 업데이트 할 수있는 방법이 있는지 알고 싶습니다. 레코드의 이전 (업데이트 전) 데이터를 유지하면서 계속 유지할 수 있는지 확인하고 싶습니다. 업데이트 이력 카운터.레코드를 업데이트하고 mysql에 이전 레코드 데이터를 보관하십시오.

실제 레코드로 마지막 업데이트 된 레코드를 사용할 수 있어야합니다.

감사합니다.

감사합니다.

+1

업데이트를 유지하려는 경우 업데이트가 작동하지 않습니다. 업데이트는 이전 데이터를 덮어 쓰기 때문에 삽입이 필요합니다. 필자는 레코드 생성의 datetime 필드 'Timestamp'를 추가하는 것이 좋습니다. 이렇게하면 실제 기록은 가장 높은 시간 기록을 가진 기록입니다. 오래된 것들은 역사입니다. 하나의 필드가 변경되는 작은 테이블에이 방법을 사용했습니다. 데이터 중복을 고려한 더 큰 테이블에 대한 최선의 접근 방식이 아닐 수도 있습니다. – Hazaart

+0

고맙습니다. 더 큰 테이블에 대해 무엇을 제안 하시겠습니까? – watkib

답변

2

레코드를 업데이트 할 필요가 없다고 생각하지만 대신 Insert 다른 레코드가 있으므로 이전 레코드는 변경되지 않습니다.

UPDATE 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

관련 문제