MySQL中處置各類反復的一些辦法。本站提示廣大學習愛好者:(MySQL中處置各類反復的一些辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中處置各類反復的一些辦法正文
有時表或成果集包括反復的記載。有時它是許可的,但有時它須要停滯反復的記載。有時它須要辨認反復的記載從表中刪除。本章將引見若何避免產生在一個表中反復的記載若何刪除曾經存在的反復記載。
避免反復表中的產生:
可使用PRIMARY KEY或UNIQUE索引的表上響應的字段來避免反復的記載。讓我們舉一個例子,上面的表中不包括如許的索引或主鍵,所以它會許可記載first_name和last_name反復
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );
可使用PRIMARY KEY或UNIQUE索引的表上響應的字段避免反復的記載。讓我們舉一個例子,上面的表中不包括如許的索引或主鍵,所以它會許可反復first_name和last_name記載
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靜靜地擯棄它,而不會發生毛病。
上面的示例中沒有毛病,同時也不會拔出反復的記載。
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拔出。假如它是一個反復的,新的記載將代替舊的:
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表。
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表中的反復記載。
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
這個查詢將前往一個列表的一切person_tbl表中反復的記載。在普通情形下,辨認反復的值,請履行以下操作:
清除反復查詢成果:
可使用DISTINCT與SELECT語句一路找出表中獨一的記載。
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;
DISTINCT是添加一個GROUP BY子句中定名的列,選擇的另外一種辦法。這具有除去反復和只選擇的奇特的組合中的指定的列的值的後果:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
刪除反復應用表改換:
假如在一個表中有反復的記載,想從該表中刪除一切的反復記載,看看上面法式的例子。
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。假如該表曾經是可用的,那末應用此辦法刪除反復的記載。
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);