MySQL中處理各種重複的一些方法

lcc發表於2021-09-09

有時表或結果集包含重複的記錄。有時它是允許的,但有時它需要停止重複的記錄。有時它需要識別重複的記錄從表中刪除。本章將介紹如何防止發生在一個表中重複的記錄如何刪除已經存在的重複記錄。
防止重複表中的發生:

可以使用PRIMARY KEY或UNIQUE索引的表上相應的欄位來防止重複的記錄。讓我們舉一個例子,下面的表中不包含這樣的索引或主鍵,所以它會允許記錄first_name和last_name重複

?

123456 CREATE TABLE person_tbl(  first_name CHAR(20),  last_name CHAR(20),  sex CHAR(10));

可以使用PRIMARY KEY或UNIQUE索引的表上相應的欄位防止重複的記錄。讓我們舉一個例子,下面的表中不包含這樣的索引或主鍵,所以它會允許重複first_name和last_name記錄

?

1234567 CREATE TABLE person_tbl(  first_name CHAR(20) NOT NULL,  last_name CHAR(20) NOT NULL,  sex CHAR(10)  PRIMARY KEY (last_name, first_name));

表中的唯一索引的存在通常會導致錯誤的發生,如果表中插入一條記錄,重複定義索引的列或列中的現有記錄。
使用INSERT IGNORE而不是INSERT。如果記錄不重複現有的記錄,MySQL將插入它像往常一樣。如果記錄是重複IGNORE關鍵字告訴MySQL靜靜地拋棄它,而不會產生錯誤。

下面的示例中沒有錯誤,同時也不會插入重複的記錄。

?

123456 mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)  -> VALUES( 'Jay', 'Thomas');Query OK, 1 row affected (0.00 sec)mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)  -> VALUES( 'Jay', 'Thomas');Query OK, 0 rows affected (0.00 sec)

使用替換而不是INSERT。如果記錄是新的它INSERT插入。如果它是一個重複的,新的記錄將取代舊的:

?

123456 mysql> REPLACE INTO person_tbl (last_name, first_name)  -> VALUES( 'Ajay', 'Kumar');Query OK, 1 row affected (0.00 sec)mysql> REPLACE INTO person_tbl (last_name, first_name)  -> VALUES( 'Ajay', 'Kumar');Query OK, 2 rows affected (0.00 sec)

使用REPLACE而不是INSERT。如果記錄是新的它INSERT插入。如果它是一個重複的,新的記錄將取代舊的:

強制唯一性的另一種方法是新增一個UNIQUE索引,而不是一個PRIMARY KEY表。

?

1234567 CREATE TABLE person_tbl(  first_name CHAR(20) NOT NULL,  last_name CHAR(20) NOT NULL,  sex CHAR(10)  UNIQUE (last_name, first_name));

計算和確定重複:

以下是查詢數first_name和last_name表中的重複記錄。

?

1234 mysql> SELECT COUNT(*) as repetitions, last_name, first_name  -> FROM person_tbl  -> GROUP BY last_name, first_name  -> HAVING repetitions > 1;

這個查詢將返回一個列表的所有person_tbl表中重複的記錄。在一般情況下,識別重複的值,請執行以下操作:

  •     確定哪一列包含的值可能會重複。

  •     在列選擇列表中隨著COUNT(*)列出的那些列。

  •     以及在GROUP BY子句中列出的列。

  •     新增的HAVING子句消除了獨特的值要求的組數大於1。

消除重複查詢結果:

可以使用DISTINCT與SELECT語句一起找出表中唯一的紀錄。

?

123 mysql> SELECT DISTINCT last_name, first_name  -> FROM person_tbl  -> ORDER BY last_name;

DISTINCT是新增一個GROUP BY子句中命名的列,選擇的另一種方法。這具有除去重複和只選擇的獨特的組合中的指定的列的值的效果:

?

123 mysql> SELECT last_name, first_name  -> FROM person_tbl  -> GROUP BY (last_name, first_name);

刪除重複使用表更換:

如果在一個表中有重複的記錄,想從該表中刪除所有的重複記錄,看看下面程式的例子。

?

12345 mysql> CREATE TABLE tmp SELECT last_name, first_name, sex  ->         FROM person_tbl;  ->         GROUP BY (last_name, first_name);mysql> DROP TABLE person_tbl;mysql> ALTER TABLE tmp RENAME TO person_tbl;

從一個表中刪除重複記錄的一個簡單的方法是新增KEY,表索引或PRIMAY。如果該表已經是可用的,那麼使用此方法刪除重複的記錄。

?

12 mysql> ALTER IGNORE TABLE person_tbl  -> ADD PRIMARY KEY (last_name, first_name);


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2811116/,如需轉載,請註明出處,否則將追究法律責任。

相關文章