本文目錄一覽:
mysql 怎麼刪除重複的數據
假設表結構為
t1(a,b)
刪除a列有重複的記錄
delete from t1,(select a from t1 group by a having count(1)1) t where t1.a=t.a;
如果希望對於有重複的記錄只保留其中一條而不是全部刪除,則可運行下列語句,前提是數據表必須含有自增id列。語句如下:
delete from t1,(select a,max(id) as id from t1 group by a having count(1)1) t where t1.a=t.a and t1.idt.id;
mysql怎麼去除重複數據
MySQL 刪除重複數據
有些 MySQL 數據表中可能存在重複的記錄,有些情況我們允許重複數據的存在,但有時候我們也需要刪除這些重複的數據。
本章節我們將為大家介紹如何防止數據表出現重複數據及如何刪除數據表中的重複數據。
刪除重複數據
如果你想刪除數據表中的重複數據,你可以使用以下的SQL語句:
from 樹懶學堂 – 一站式數據知識平台
當然你也可以在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重複記錄。方法如下:
mysql 有重複數據,怎麼刪掉
這個需要分情況。1,你的資料庫表中有主鍵,且主鍵上面的數據為唯一值。也就是沒有重複值。那麼你在刪除的時候,將這個唯一值作為條件進行刪除。如: delete from [表名] where id=12.所有的數據相同,那麼你只能打開數據表,手工選定其中某一條,進行刪除。
mysql怎麼刪除表中的重複的數據
通常情況下,一個我們在做一個產品的時候,一開始可能由於設計考慮不周或者程序寫的不夠嚴謹,某個欄位上的值產生重複了,但是又必須去掉,這個時候就稍微麻煩了一點,直接加一個 UNIQUE KEY 肯定是不行了,因為會報錯。
現在,我們來採用一種變通的辦法,不過可能會丟失一些數據 :)
在這裡,我們設定一個表,其結構如下:
mysql desc `user`;
+——-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | | |
| extra | char(10) | NO | | | |
+——-+——————+——+—–+———+—————-+
原來表中的數據假定有以下幾條:
mysql SELECT * FROM `user`;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 6 | user3 | user6 |
| 7 | user6 | user7 |
| 8 | user2 | user8 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
1、將原來的數據導出
mysqlSELECT * INTO OUTFILE ‘/tmp/user.txt’ FROM `user`;
2、清空數據表
mysqlTRUNCATE TABLE `user`;
3、創建唯一索引,並且修改 `name` 欄位的類型為 BINARY CHAR 區分大小寫
mysql ALTER TABLE `user` MODIFY `name` CHAR(10) BINARY NOT NULL DEFAULT ”;
mysql ALTER TABLE `user` ADD UNIQUE KEY ( `name` );
現在來看看新的表結構:
mysql desc user;
+——-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | UNI | | |
| extra | char(10) | NO | | | |
+——-+——————+——+—–+———+—————-+
4、把數據導回去,在這裡,有兩種選擇:新的重複記錄替換舊的記錄,只保留最新的記錄 或者是 新的記錄略過,只保留最舊的記錄
mysql LOAD DATA INFILE ‘/tmp/user.txt’ REPLACE INTO TABLE `user`;
Query OK, 10 rows affected (0.00 sec)
Records: 8 Deleted: 2 Skipped: 0 Warnings: 0
mysql SELECT * FROM USER;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 8 | user2 | user8 |
| 6 | user3 | user6 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
上面是採用 REPLACE 的方式,可以看到,導入過程中刪掉了兩條數據,結果驗證確實是 新的重複記錄替換舊的記錄,只保留最新的記錄。
現在,來看看用 IGNORE 的方式:
mysql LOAD DATA INFILE ‘/tmp/user.txt’ IGNORE INTO TABLE `user`;
Query OK, 6 rows affected (0.01 sec)
Records: 8 Deleted: 0 Skipped: 2 Warnings: 0
mysql SELECT * FROM USER;
+—-+——-+——–+
| id | name | extra |
+—-+——-+——–+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+—-+——-+——–+
看到了吧,確實是 新的記錄略過,只保留最舊的記錄。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/275603.html