MYSQL处理数据重复值
MYSQL表或結果集有時會包含重復記錄,需要采用某種方法標識這些重復的記錄并移除它們,具體方案如下:
1、防止表中出現重復的記錄
1.1、使用主鍵或唯一索引來防止出現重復的記錄。例如,下表person_tbl允許出現first_name和last_name組合相同的記錄。
CREATE TABLE person_tbl
(? ?
?first_name CHAR(20),? ??
?last_name CHAR(20),? ??
?sex CHAR(10)
);
1.2、設置(last_name,first_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)
);
1.3、設置唯一索引,來強制記錄是唯一的,語句如下。
CREATE TABLE person_tbl
(? ?
first_name CHAR(20) NOT NULL,??
last_name CHAR(20) NOT NULL,??
sex CHAR(10)? ?
UNIQUE (last_name, first_name)
);
2、數據庫插入去除重復
對于可能出現重復的記錄,我們可以考慮使用INSERT IGNORE語句。如果插入的記錄并沒有和現存的記錄發生沖突,則正常插入之;如果有重復沖突,那么INSERT IGNORE將會告訴MySQL丟棄這條記錄,且不報錯。如下面這個例子。
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
? ?VALUES ( 'Jay', 'Thomas');
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
? ?VALUES ( 'Jay', 'Thomas');
還可以考慮采用REPLACE語句,如果記錄是新的,那么它等同于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)
綜上所述,對于重復的記錄,INSERT IGNORE仍然保留著現在的記錄,丟棄新插入的記錄。而REPLACE語句則會使用新的記錄覆蓋掉舊的記錄。
文章基于MySQL DBA修煉之道整理,版權屬于原作者
總結
以上是生活随笔為你收集整理的MYSQL处理数据重复值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android所有颜色代码
- 下一篇: maven jersey mysql_M