熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

教你刪除Oracle數據庫中重復沒用的數據

2013-11-13 22:16:53  來源: Oracle 

  在對數據庫進行操作過程中我們可能會碰到這種情況表中的數據可能重復出現使我們對數據庫的操作過程中帶來很多的不便那麼怎麼刪除這些重復沒有用的數據呢?

  重復數據刪除技術可以提供更大的備份容量實現更長時間的數據保留還能實現備份數據的持續驗證進步數據恢復服務水平方便實現數據容災等 重復的數據可能有這樣兩種情況第一種時表中只有某些字段一樣第二種是兩行記錄完全一樣Oracle數據庫重復數據刪除技術有如下優勢更大的備份容量數據能得到持續驗證有更高的數據恢復服務水平方便實現備份數據的容災

  刪除部分字段重復數據

  先來談談如何查詢重復的數據吧

  下面語句可以查詢出那些數據是重復的

  select 字段字段count(*) from 表名 group by 字段字段 having count(*) >

  將上面的>號改為=號就可以查詢出沒有重復的數據了

  想要刪除這些重復的數據可以使用下面語句進行刪除

  delete from 表名 a where 字段字段 in

  (select 字段字段count(*) from 表名 group by 字段字段 having count(*) > )

  上面的語句非常簡單就是將查詢到的數據刪除掉不過這種刪除執行的效率非常低對於大數據量來說可能會將數據庫吊死所以我建議先將查詢到的重復的數據插入到一個暫時表中然後對進行刪除這樣執行刪除的時候就不用再進行一次查詢了如下

  create TABLE 暫時表 AS

  (select 字段字段count(*) from 表名 group by 字段字段 having count(*) > )

  上面這句話就是建立了暫時表並將查詢到的數據插入其中

  下面就可以進行這樣的刪除操作了

  delete from 表名 a where 字段字段 in (select 字段字段 from 暫時表);

  這種先建暫時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多

  這個時候大家可能會跳出來說什麼?你叫我們執行這種語句那不是把所有重復的全都刪除嗎?而我們想保留重復數據中最新的一條記錄啊!大家不要急下面我就講一下如何進行這種操作

  在oracle中有個隱藏了自動rowid裡面給每條記錄一個唯一的rowid我們假如想保留最新的一條記錄

  我們就可以利用這個字段保留重復數據中rowid最大的一條記錄就可以了

  下面是查詢重復數據的一個例子

    以下是引用片段
selectarowida*from表名a 
  wherearowid!= 
  ( 
  selectmax(browid)from表名b 
  wherea字段=b字段and 
  a字段=b字段 
  )

  下面我就來講解一下上面括號中的語句是查詢出重復數據中rowid最大的一條記錄

  而外面就是查詢出除了rowid最大之外的其他重復的數據了

  由此我們要刪除重復數據只保留最新的一條數據就可以這樣寫了

  deletefrom表名a 
  wherearowid!= 
  ( 
  selectmax(browid)from表名b 
  wherea字段=b字段and 
  a字段=b字段 
  )

  隨便說一下上面語句的執行效率是很低的可以考慮建立暫時表講需要判定重復的字段rowid插入暫時表中然後刪除的時候在進行比較

   createtable暫時表as 
  selecta字段a字段MAX(aROWID)dataidfrom正式表aGROUPBYa字段a字段; 
  deletefrom表名a 
  wherearowid!= 
  ( 
  selectbdataidfrom暫時表b 
  wherea字段=b字段and 
  a字段=b字段 
  ); 
  commit;

  完全刪除重復記錄

  對於表中兩行記錄完全一樣的情況可以用下面語句獲取到去掉重復數據後的記錄

  select distinct * from 表名

  可以將查詢的記錄放到暫時表中然後再將原來的表記錄刪除最初將暫時表的數據導回原來的表中如下

  createTABLE暫時表AS(selectdistinct*from表名);
  truncatetable正式表;原先由於筆誤寫成了droptable正式表;現在已經改正過來
  insertinto正式表(select*from暫時表);
  droptable暫時表;

  假如想刪除一個表的重復數據可以先建一個暫時表將去掉重復數據後的數據導入到暫時表然後在從暫時表將數據導入正式表中如下

  insertINTOt_table_bak 
  selectdistinct*fromt_table;

  怎樣快速刪除oracle數據庫

  最快的方法就進入注冊表 在運行裡輸入regedit

  依次展開HKEY_LOCAL_MACHINE SOFTWARE

  找到ORACLE節點刪除

  然後刪除ORACLE數據文件安裝的時候選的路徑

  最初刪除oracle引導文件在系統盤符的Program Files 裡面刪除oracle文件夾


From:http://tw.wingwit.com/Article/program/Oracle/201311/18677.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.