資料庫記錄刪除方式 有哪些

一个新手
發布: 2017-09-30 10:06:19
原創
1591 人瀏覽過

資料庫記錄刪除方式 有哪些

引言

刪除資料庫記錄是一個非常常見的需求,當資料失去價值時,我們便會刪除它,但是如果操作不當,往往就會把一些有價值的資料誤刪掉,造成重要資料的遺失,合理採用刪除方式才能更好地利用資料資源,以下介紹幾種常用的刪除方式。

刪除方式

物理刪除

物理刪除就是直接從資料庫中刪除一筆或多筆記錄,將資料從磁碟上擦除,可以使用DELETE FROMSQL語句實現,這種方式產生的後果就是記錄永久性刪除,無法找回,一般適用於小型或資料重要性不高的項目,可以提高資料庫資源利用率。物理刪除方式是一種最簡單、最基本的資料刪除方式,這裡不多做介紹,我們主要來看一下邏輯刪除方式。

邏輯刪除

所謂的邏輯刪除就是實現記錄已刪除的效果,但實際上資料仍然存在於資料庫中,只是對使用者隱藏這部分資料。一些大型的、資料關聯性高、資料重要性高的應用程式往往會採用這種刪除方式,它可以實現回收站、刪除恢復、查看歷史版本等實用功能,根據業務的需要有不同的應用場景。

應用程式場景

例如,在某些郵件應用程式中,當你刪除一封郵件時,不會將郵件直接刪除,而是把郵件移到回收站,你可以在回收站中對郵件進行恢復、徹底刪除等操作,可有效防止誤刪等情況。
再例如部落格管理平台一般都會提供查看修改歷史、比較歷史版本等功能,我們可以方便地查看文章的修改歷史,以及恢復到之前某一版本。

實現思路

標記刪除

採用刪除標記的方式可以很容易地實現邏輯刪除功能,透過在表中添加一個刪除標記字段,將正常記錄的此欄位設定為0,已刪除記錄的該欄位設定為1,查詢時新增一個where條件篩選刪除標記為0的記錄,就可以實現邏輯刪除的功能,此時的刪除業務只需要將記錄的刪除標記欄位修改為1即可。

拉鍊

拉鍊方式來自資料倉庫,是針對資料倉儲設計中表格儲存資料的方式而定義的,所謂拉鍊,就是記錄歷史,記錄一個事物從開始到目前狀態的所有變更資訊。拉鍊演算法是目前資料倉儲領域最典型的演算法之一。
這種方式的表格結構與普通表的差異在於多了兩個欄位(START_DATE&END_DATE)表示記錄的有效時間,分別為記錄新增時間和記錄最大有效時間。

  • 資料表採用聯合主鍵的方式,使用idSTART_DATE來唯一的表示某筆記錄,如:


    CREATE TABLE `table_name` (
    `id` INT NOT 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;
    登入後複製
  • 透過這種方式可以完整地記錄下資料的變更情況,使用下面的查詢語句就可以取得某筆記錄的完整版本清單以及查看特定版本的內容:
    " sql
    -- 取得版本清單

  • select start_date from table_name where id=记录ID order by start_date;
    登入後複製

-- 查看特定版本內容

#
select * from table_name where id=记录ID and start_date=版本日期;
登入後複製

写在最后

不同的业务需要根据其应用场景来选择合适的数据删除方式,一般的应用可以采用物理删除的方式,简单粗暴地将数据擦除,这样可以有效提高数据库地利用率,如果历史数据一点价值都没有或者价值不高,那还留着干什么,这时如果采用逻辑删除地方式反而加重了数据库的负担,浪费了大量宝贵的资源。但是有些项目如金融、交通、能源等领域的历史数据,往往具有很高的利用价值,通过对这些数据进行分析总结,可以更好的了解该领域的发展情况和健康程度,以及对未来的发展规划起到一定指导作用,这时就要采用逻辑删除的方式,虽然数据管理平台为了便于管理,删除了过期的数据,但数据分析系统仍能从数据库中获取到历史数据,通过抽取转换加载的过程,将历史数据转化为高价值的内容,这是目前信息技术发展的主要趋势。

以上是資料庫記錄刪除方式 有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!