
- MariaDB 教程
- MariaDB - 首頁
- MariaDB - 簡介
- MariaDB - 安裝
- MariaDB - 管理
- MariaDB - PHP 語法
- MariaDB - 連線
- MariaDB - 建立資料庫
- MariaDB - 刪除資料庫
- MariaDB - 選擇資料庫
- MariaDB - 資料型別
- MariaDB - 建立表
- MariaDB - 刪除表
- MariaDB - 插入查詢
- MariaDB - 選擇查詢
- MariaDB - WHERE 子句
- MariaDB - 更新查詢
- MariaDB - 刪除查詢
- MariaDB - LIKE 子句
- MariaDB - ORDER BY 子句
- MariaDB - JOIN
- MariaDB - NULL 值
- MariaDB - 正則表示式
- MariaDB - 事務
- MariaDB - ALTER 命令
- 索引和統計表
- MariaDB - 臨時表
- MariaDB - 表克隆
- MariaDB - 序列
- MariaDB - 管理重複資料
- MariaDB - SQL 注入防護
- MariaDB - 備份方法
- MariaDB - 備份載入方法
- MariaDB - 有用函式
- MariaDB 有用資源
- MariaDB - 快速指南
- MariaDB - 有用資源
- MariaDB - 討論
MariaDB - 管理重複資料
如之前課程中所述,MariaDB 在某些情況下允許重複記錄和表。一些重複資料實際上並非重複,因為它們具有不同的資料或物件型別,或者由於操作物件的唯一生命週期或儲存而導致。這些重複資料通常也不會造成任何問題。
在某些情況下,重複資料確實會導致問題,並且它們通常是由於隱式操作或 MariaDB 命令的寬鬆策略而出現。有一些方法可以控制這個問題,查詢重複資料,刪除重複資料,以及防止重複資料的建立。
策略和工具
有四種主要方法可以管理重複資料:
使用 JOIN 查詢它們,並使用臨時表刪除它們。
使用 INSERT...ON DUPLICATE KEY UPDATE 在發現重複資料時進行更新。
使用 DISTINCT 修剪 SELECT 語句的結果並刪除重複資料。
使用 INSERT IGNORE 停止插入重複資料。
使用 JOIN 和臨時表
只需執行類似於內部聯接的半聯接,然後使用臨時表刪除找到的重複資料。
使用 INSERT
當 INSERT...ON DUPLICATE KEY UPDATE 發現重複的唯一鍵或主鍵時,它會執行更新操作。如果發現多個唯一鍵,它只會更新第一個。因此,不要在包含多個唯一索引的表上使用它。
檢視以下示例,該示例揭示了在將資料插入已填充欄位時,包含索引值的表中會發生什麼:
INSERT INTO add_dupl VALUES (1,'Apple'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
注意 - 如果未找到鍵,則 INSERT...ON DUPLICATE KEY UPDATE 語句會像正常的插入語句一樣執行。
使用 DISTINCT
DISTINCT 子句從結果中刪除重複資料。DISTINCT 子句的通用語法如下:
SELECT DISTINCT fields FROM table [WHERE conditions];
注意 - 包含 DISTINCT 子句的語句的結果:
使用一個表示式時,它會返回該表示式的唯一值。
使用多個表示式時,它會返回唯一的組合。
它不會忽略 NULL 值;因此,結果還包含 NULL 作為唯一值。
檢視以下使用單個表示式的 DISTINCT 子句的語句:
SELECT DISTINCT product_id FROM products WHERE product_name = 'DustBlaster 5000';
檢視以下使用多個表示式的示例:
SELECT DISTINCT product_name, product_id FROM products WHERE product_id < 30
使用 INSERT IGNORE
INSERT IGNORE 語句指示 MariaDB 在發現重複記錄時取消插入操作。檢視以下給出的其用法示例:
mysql> INSERT IGNORE INTO customer_tbl (LN, FN) VALUES( 'Lex', 'Luther');
此外,請注意重複資料背後的邏輯。某些表需要重複資料,具體取決於該表資料的性質。在管理重複記錄的策略中考慮這一需求。