刪除資料庫記錄是乙個非常常見的需求,當資料失去價值時,我們便會刪除它,但是如果操作不當,往往就會把一些有價值的資料誤刪掉,造成重要資料的丟失,合理採用刪除方式才能更好地利用資料資源,下面介紹幾種常用的刪除方式:
物理刪除就是直接從資料庫中刪除一條或多條記錄,將資料從磁碟上擦除,可以使用delete from
sql語句實現,這種方式產生的後果就是記錄永久性刪除,無法找回,一般適用於小型或資料重要性不高的專案,可以提高資料庫資源利用率。物理刪除方式是一種最簡單最基本的資料刪除方式,這裡不多做介紹,我們主要來看一下邏輯刪除方式。
所謂的邏輯刪除就是實現記錄已刪除的效果,但實際上資料仍然存在於資料庫中,只是對使用者隱藏這一部分資料。一些大型的、資料關聯性高、資料重要性高的應用往往會採用這種刪除方式,它可以實現**站、刪除恢復、檢視歷史版本等實用功能,根據業務的需要有不同的應用場景。
例如,在一些郵箱應用中,當你刪除一條郵件時,不會將郵件直接刪除,而是把郵件移動到**站,你可以在**站中對郵件進行恢復、徹底刪除等操作,可以有效防止誤刪等情況。
再比如部落格管理平台一般都會提供檢視修改歷史、比較歷史版本等功能,我們可以方便地檢視文章的修改歷史,以及恢復到之前某一版本。
採用刪除標記的方式可以很容易地實現邏輯刪除功能,通過在表中新增乙個刪除標記字段,將正常記錄的該字段設定為0,已刪除記錄的該字段設定為1,查詢時新增乙個where
條件篩選刪除標記為0的記錄,就可以實現邏輯刪除的功能,此時的刪除業務只需要將記錄的刪除標記字段修改為1即可。
拉鍊方式**於資料倉儲,是針對資料倉儲設計中表儲存資料的方式而定義的,所謂拉鍊,就是記錄歷史,記錄乙個事物從開始到當前狀態的所有變化資訊。拉鍊演算法是目前資料倉儲領域最典型的演算法之一。
這種方式的表結構與普通表的區別在於多了兩個字段(start_date
&end_date
)表示記錄的有效時間,分別為記錄新增時間和記錄最大有效時間。
資料表採用聯合主鍵的方式,使用id
和start_date
來唯一的表示某條記錄,如:
create
table
`table_name` (
`id`
intnot
null auto_increment,
`start_date` datetime not
null,
`end_date` datetime not
null,
...,
primary
key(`id`,`start_date`)
)engine=myisam default charset=utf8;
新增記錄時start_date
可設定為當前時間,end_date
設定為null或未來某個時間來表示無窮大,如:
insert
into table_name(start_date,end_date,...) values(當前時間,一百年後,...);
查詢資料時只要對日期進行篩選就可得到當前有效的記錄,例如
select * from table_name where id=記錄id and start_date<=當前時間 and end_date>當前時間;
修改記錄的方式與傳統方式不同,修改操作並不是直接修改資料庫中的某條記錄,而是把修改的原有效記錄的end_date
設定為當前時間,接下來新增一條完整的、修改後的記錄,如:
update table_name set end_date=當前時間 where id=原記錄id and end_date=一百年後;
insert
into table_name(id,start_date,end_date,...) values(原記錄id,當前時間,一百年後,...);
刪除操作很簡單,不是真的將記錄從資料表中移除,只需把記錄的end_date
設定為當前時間即可,如:
update table_name set end_date=當前時間 where id=刪除記錄id;
通過這種方式可以完整地記錄下資料的變化情況,使用下面的查詢語句就可以獲取某條記錄的完整版本列表以及檢視特定版本的內容:
-- 獲取版本列表
select start_date from table_name where id=記錄id order
by start_date;
-- 檢視特定版本內容
select * from table_name where id=記錄id and start_date=版本日期;
不同的業務需要根據其應用場景來選擇合適的資料刪除方式,一般的應用可以採用物理刪除的方式,簡單粗暴地將資料擦除,這樣可以有效提高資料庫地利用率,如果歷史資料一點價值都沒有或者價值不高,那還留著幹什麼,這時如果採用邏輯刪除地方式反而加重了資料庫的負擔,浪費了大量寶貴的資源。但是有些專案如金融、交通、能源等領域的歷史資料,往往具有很高的利用價值,通過對這些資料進行分析總結,可以更好的了解該領域的發展情況和健康程度,以及對未來的發展規劃起到一定指導作用,這時就要採用邏輯刪除的方式,雖然資料管理平台為了便於管理,刪除了過期的資料,但資料分析系統仍能從資料庫中獲取到歷史資料,通過抽取轉換載入的過程,將歷史資料轉化為**值的內容,這是目前資訊科技發展的主要趨勢。 資料庫刪除重覆記錄
刪除重覆記錄 sql delete from wzh questions a where a.rowid select max rowid from lunar b where a.shuaho b.shuhao and a.tihao b.tihao 整理insert語句 select inser...
資料庫幾種表刪除方式
drop 語法 drop table 表名稱刪除內容和定義,刪除的是整個表 結構和資料 將表所占用的空間全釋放掉。無法回滾,所以刪除是不能恢復的,如果再次使用的話需要新建表。truncate truncate table 表名稱只是清空表,刪除內容,釋放空間,但不刪除定義 保留表的資料結構 且不會把...
資料庫遷移記錄(資料幫浦方式)
1.平台 windows遷移至linux 需要停止業務 2.源庫 匯出使用者下的物件 源庫有兩個業務schema expdp system x sid schemas x dumpfile x pic.dmp content metadata only logfile exp.log 此模式僅匯出空...