《MYSQL教程MySQL中處理各種重復(fù)的一些方法》要點(diǎn):
本文介紹了MYSQL教程MySQL中處理各種重復(fù)的一些方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫(kù)有時(shí)表或結(jié)果集包含重復(fù)的記錄.有時(shí)它是允許的,但有時(shí)它需要停止重復(fù)的記錄.有時(shí)它需要識(shí)別重復(fù)的記錄從表中刪除.本章將介紹如何防止發(fā)生在一個(gè)表中重復(fù)的記錄如何刪除已經(jīng)存在的重復(fù)記錄.
防止重復(fù)表中的發(fā)生:
MYSQL數(shù)據(jù)庫(kù)可以使用PRIMARY KEY或UNIQUE索引的表上相應(yīng)的字段來(lái)防止重復(fù)的記錄.讓我們舉一個(gè)例子,下面的表中不包含這樣的索引或主鍵,所以它會(huì)允許記錄first_name和last_name重復(fù)
MYSQL數(shù)據(jù)庫(kù)
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
MYSQL數(shù)據(jù)庫(kù)可以使用PRIMARY KEY或UNIQUE索引的表上相應(yīng)的字段防止重復(fù)的記錄.讓我們舉一個(gè)例子,下面的表中不包含這樣的索引或主鍵,所以它會(huì)允許重復(fù)first_name和last_name記錄
MYSQL數(shù)據(jù)庫(kù)
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)
);
MYSQL數(shù)據(jù)庫(kù)表中的唯一索引的存在通常會(huì)導(dǎo)致錯(cuò)誤的發(fā)生,如果表中插入一條記錄,重復(fù)定義索引的列或列中的現(xiàn)有記錄.
使用INSERT IGNORE而不是INSERT.如果記錄不重復(fù)現(xiàn)有的記錄,MySQL將插入它像往常一樣.如果記錄是重復(fù)IGNORE關(guān)鍵字告訴MySQL靜靜地拋棄它,而不會(huì)產(chǎn)生錯(cuò)誤.
MYSQL數(shù)據(jù)庫(kù)下面的示例中沒(méi)有錯(cuò)誤,同時(shí)也不會(huì)插入重復(fù)的記錄.
MYSQL數(shù)據(jù)庫(kù)
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)
MYSQL數(shù)據(jù)庫(kù)使用替換而不是INSERT.如果記錄是新的它INSERT插入.如果它是一個(gè)重復(fù)的,新的記錄將取代舊的:
MYSQL數(shù)據(jù)庫(kù)
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)
MYSQL數(shù)據(jù)庫(kù)使用REPLACE而不是INSERT.如果記錄是新的它INSERT插入.如果它是一個(gè)重復(fù)的,新的記錄將取代舊的:
MYSQL數(shù)據(jù)庫(kù)強(qiáng)制唯一性的另一種方法是添加一個(gè)UNIQUE索引,而不是一個(gè)PRIMARY KEY表.
MYSQL數(shù)據(jù)庫(kù)
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);
MYSQL數(shù)據(jù)庫(kù)計(jì)算和確定重復(fù):
MYSQL數(shù)據(jù)庫(kù)以下是查詢數(shù)first_name和last_name表中的重復(fù)記錄.
MYSQL數(shù)據(jù)庫(kù)
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
MYSQL數(shù)據(jù)庫(kù)這個(gè)查詢將返回一個(gè)列表的所有person_tbl表中重復(fù)的記錄.在一般情況下,識(shí)別重復(fù)的值,請(qǐng)執(zhí)行以下操作:
MYSQL數(shù)據(jù)庫(kù)消除重復(fù)查詢結(jié)果:
MYSQL數(shù)據(jù)庫(kù)可以使用DISTINCT與SELECT語(yǔ)句一起找出表中唯一的紀(jì)錄.
MYSQL數(shù)據(jù)庫(kù)
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl
-> ORDER BY last_name;
MYSQL數(shù)據(jù)庫(kù)DISTINCT是添加一個(gè)GROUP BY子句中命名的列,選擇的另一種方法.這具有除去重復(fù)和只選擇的獨(dú)特的組合中的指定的列的值的效果:
MYSQL數(shù)據(jù)庫(kù)
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
MYSQL數(shù)據(jù)庫(kù)刪除重復(fù)使用表更換:
MYSQL數(shù)據(jù)庫(kù)如果在一個(gè)表中有重復(fù)的記錄,想從該表中刪除所有的重復(fù)記錄,看看下面程序的例子.
MYSQL數(shù)據(jù)庫(kù)
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;
MYSQL數(shù)據(jù)庫(kù)從一個(gè)表中刪除重復(fù)記錄的一個(gè)簡(jiǎn)單的方法是添加KEY,表索引或PRIMAY.如果該表已經(jīng)是可用的,那么使用此方法刪除重復(fù)的記錄.
MYSQL數(shù)據(jù)庫(kù)
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/3417.html