如何對錶中資料的修改做歷史記錄

2021-08-18 09:41:44 字數 1569 閱讀 6768

現在有一張表user

裡面字段如下

userid 使用者帳號(唯一不可修改)

username 使用者名稱

phone 手機號

email 郵箱

createtime 建立時間

updatetime 更新時間

比較low的方式是建立乙個記錄表user_record

同樣包含以上字段,每次修改插入一條修改之前的記錄,這樣有兩個弊端

1.資料冗餘,及時至修改了乙個欄位也要插入一整條記錄

2.不利於擴充套件,如果主表新增字段,記錄表user_record也要相應增加,違背了dry原則

所以,在此提出乙個相對優秀的解決方案

新建乙個updateevent表,有如下字段

event_id 自增id

version 版本號

object_type 源資料的表名或者能唯一對應的源資料表的標識均可(可以看到此表支援多表進行擴充套件)

當然,也可根據業務需求自行定義類別

object_id 源資料表主鍵

field_name 修改的源資料表的欄位名

object_code 源資料表主鍵對應的code(可以忽略)

field_old_value 該欄位原來的值

field_new_value 該欄位最新的值

每次我們進行更新操作的時候,首先獲取修改之前的實體olduser和修改之後的newuser

然後通過反射進行兩個版本的比較,獲得auditdata列表插入到資料庫

publicclass auditdata

public

string version  

public

string object_type  

public

string object_id  

public

string object_code  

public

string field_name  

public

string field_old_value  

public

string field_new_value  

listauditdatalist =newlist();

propertyinfo userpropertys = newuser.gettype().getproperties();

for(inti = 0; i < userpropertys.length; i++)

}else}}

}

檢視資料修改歷史記錄

create table tzy test name varchar2 10 addr varchar2 20 insert into tzy test values 張三 廣東 insert into tzy test values 李四 上海 insert into tzy test value...

你無法修改 Git 的歷史記錄

有時候使用git工作得小心翼翼,特別是涉及到一些高階操作,例如 reset,rebase 和 merge。甚至一些很小的操作,例如刪除乙個分支,我都擔心資料丟失。不久之前,我在做一些大動作 rebasing 之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說...

將歷史記錄移到歷史表中

用一配製表存需要轉移資料的大表名稱 每次都查表名與tab name相匹配且is used 1的 說明是當前的歷史表 create table config table configid int,id tab name varchar 64 需要轉移資料大表名稱 condition col varch...