Navicat Premium是一個可鏈接多種數據庫的管理工具,它可讓你以單一程序同時鏈接到MySQL、Oracle及PostgreSQL數據庫,讓管理不一樣類型的數據庫更加的方便。服務器
DBA最大的麻煩之一是處理重複數據。無論咱們如何防範,重複數據老是會設法進入到表格。重複數據是一個大問題,由於它會影響應用程序視圖(每一個項都應該是惟一的)、扭曲統計信息,在嚴重狀況下還會增長服務器開銷。工具
在本技巧中,咱們將學習如何識別MySQL中的重複數據,以及如何刪除它們而不刪除寶貴的有效數據。學習
您將遇到的大多數重複記錄是兩種不一樣類型之一:重複含義和非惟一鍵。在本篇文章中,咱們將處理重複含義;在下篇文章中,咱們將處理非惟一鍵。spa
重複意義是最多見的重複類型。在這種狀況下,兩個或多個字段的內容不相同,但它們的含義是相同的。你能夠把它看做是語義上的重複數據。code
考慮下表摘錄:blog
1ci 2rem 3get 4 5 6 7 |
|
在媒體專欄中,「Television」和「TV」兩個詞條的含義相同,但表達方式不一樣。這個問題一般是由使用自由文本輸入引發的,有限的下拉列表是更好的選擇。
這種類型的複製處理起來很是困難,由於不能使用select distinct排除重複項。
有兩種方法能夠解決這個問題:
1.使用replace()選擇數據,將不須要的值替換爲但願看到的值:
1 2 3 |
|
2.更新實際表數據。下面是一個聲明,用首選的「TELEVISION」值更新「TV」的全部實例:
1 2 3 |
|
下面是一個真實的例子!
一些不須要的捲曲撇號進入了數據。注意「O'BRIEN」和「O'BRIEN」條目:
1 2 3 4 5 6 7 |
|
咱們能夠像上面那樣處理這個問題:
1.使用replace()選擇數據,用常規的單引號替換大撇號,這樣咱們就能夠始終處理相同的字符:
1 2 3 4 |
|
2.更新實際表數據。此語句用常規單引號更新姓氏列中的全部撇號:
1 2 3 |
|
重複記錄、雙精度、冗餘數據、重複行;不管您如何稱呼它們,它們都是DBA生命中最大的缺陷之一。然而,重要的是要按期清除它們,以避免產生錯誤的統計數據並混淆與數據庫交互的用戶。