翻譯|使用教程|編輯:黃竹雯|2019-01-29 09:48:47.000|閱讀 1019 次
概述:本篇文章介紹了如何識別MySQL中的重復數據,以及如何刪除它們而不刪除寶貴的有效數據。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。
DBA最大的麻煩之一是處理重復數據。不管我們如何防范,重復數據總是會設法進入到表格。重復數據是一個大問題,因為它會影響應用程序視圖(每個項都應該是唯一的)、扭曲統計信息,在嚴重情況下還會增加服務器開銷。
在本技巧中,我們將學習如何識別MySQL中的重復數據,以及如何刪除它們而不刪除寶貴的有效數據。
您將遇到的大多數重復記錄是兩種不同類型之一:重復含義和非唯一鍵。在本篇文章中,我們將處理重復含義;在下篇文章中,我們將處理非唯一鍵。
重復意義是最常見的重復類型。在這種情況下,兩個或多個字段的內容不相同,但它們的含義是相同的。你可以把它看作是語義上的重復數據。
考慮下表摘錄:
movie_name media --------------------------- ACADEMY DINOSAUR Theatre ACE GOLDFINGER Television ADAPTATION HOLES Theatre AFFAIR PREJUDICE Theatre AFRICAN EGG TV
在媒體專欄中,“Television”和“TV”兩個詞條的含義相同,但表達方式不同。這個問題通常是由使用自由文本輸入引起的,有限的下拉列表是更好的選擇。
這種類型的復制處理起來非常困難,因為不能使用select distinct排除重復項。
有兩種方法可以解決這個問題:
1.使用replace()選擇數據,將不需要的值替換為希望看到的值:
SELECT DISTINCT movie_name, REPLACE(media, "TV", "TELEVISION") as media, FROM films;
2.更新實際表數據。下面是一個聲明,用首選的“TELEVISION”值更新“TV”的所有實例:
UPDATE films SET media = REPLACE(media, "TV", "TELEVISION") WHERE media = "TV";
下面是一個真實的例子!
一些不需要的卷曲撇號進入了數據。注意“O'BRIEN”和“O'BRIEN”條目:
first_name last_name --------------------- PENELOPE GUINESS CONAN O'BRIEN ED CHASE JENNIFER DAVIS CONAN O'BRIEN
我們可以像上面那樣處理這個問題:
1.使用replace()選擇數據,用常規的單引號替換大撇號,這樣我們就可以始終處理相同的字符:
SELECT DISTINCT first_name, REPLACE(last_name, "'", "'") as last_name, FROM actors WHERE REPLACE(last_name, "'", "'") like "O'BRIEN";
2.更新實際表數據。此語句用常規單引號更新姓氏列中的所有撇號:
UPDATE actors SET last_name = REPLACE(last_name, "'", "'") WHERE last_name like "%'%";
重復記錄、雙精度、冗余數據、重復行;無論您如何稱呼它們,它們都是DBA生命中最大的缺陷之一。然而,重要的是要定期清除它們,以免產生錯誤的統計數據并混淆與數據庫交互的用戶。
購買Navicat Premium正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn