MySQL 處理重復數據的方法(防止、刪除)_Mysql

來源:腳本之家  責任編輯:小易  

select*from tb group by name,type;www.anxorj.tw防采集請勿采集本網。

有些 MySQL 數據表中可能存在重復的記錄,有些情況我們允許重復數據的存在,但有時候我們也需要刪除這些重復的數據。

使用DISTINCT關鍵字即可。格式如下: SELECT DISTINCT 列名 FROM 表名;

本章節我們將為大家介紹如何防止數據表出現重復數據及如何刪除數據表中的重復數據。

SELECT COUNT(DISTINCT AA.字段) FROM(SELECT 字段 FROM TABLE1 UNION ALL SELECT 字段 FROM TABLE2)AA;

防止表中出現重復數據

mysql沒用過 oracle 是在第一個字段上去重就可以,不知道mysql通用不,

你可以在 MySQL 數據表中設置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數據的唯一性。

分兩步就簡單點,第一步把需要合并的插入到臨時表里面,第二步把臨時表的數據添加到表1中,大概SQL語句: SELECT*INTO TEMP TABLE tmp FROM 表2 WHERE.NOT IN 或者NOT EXISTS選取表1中沒有的數據

讓我們嘗試一個實例:下表中無索引及主鍵,所以該表允許出現多條重復記錄。

delete from zhszty_ebook where id not in mysql有個特性,對于表進行修改,刪除操作,子查詢不能和外層的查詢的表一樣,所以在加個select就可以了。其他數據庫按照樓上的那個是沒問題的

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

如果你想設置表中字段 first_name,last_name 數據不能重復,你可以設置雙主鍵模式來設置數據的唯一性, 如果你設置了雙主鍵,那么那個鍵的默認值不能為 NULL,可設置為 NOT NULL。如下所示:

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));

如果我們設置了唯一索引,那么在插入重復數據時,SQL 語句將無法執行成功,并拋出錯。

INSERT IGNORE INTO 與 INSERT INTO 的區別就是 INSERT IGNORE 會忽略數據庫中已經存在的數據,如果數據庫沒有數據,就插入新的數據,如果有數據的話就跳過這條數據。這樣就可以保留數據庫中已經存在數據,達到在間隙中插入數據的目的。

以下實例使用了 INSERT IGNORE INTO,執行后不會出錯,也不會向數據表中插入重復數據:

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 IGNORE INTO 當插入數據時,在設置了記錄的唯一性后,如果插入重復數據,將不返回錯誤,只以警告形式返回。 而 REPLACE INTO 如果存在 primary 或 unique 相同的記錄,則先刪除掉。再插入新記錄。

另一種設置數據的唯一性方法是添加一個 UNIQUE 索引,如下所示:

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 表中重復的記錄數。 一般情況下,查詢重復的值,請執行以下操作: 確定哪一列包含的值可能會重復。 在列選擇列表使用COUNT(*)列出的那些列。 在GROUP BY子句中列出的列。 HAVING子句設置重復數大于1。

過濾重復數據

如果你需要讀取不重復的數據可以在 SELECT 語句中使用 DISTINCT 關鍵字來過濾重復數據。

mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl;

你也可以使用 GROUP BY 來讀取數據表中不重復的數據:

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

刪除重復數據

如果你想刪除數據表中的重復數據,你可以使用以下的SQL語句:

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

當然你也可以在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下:

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

以上就是MySQL 處理重復數據的方法(防止、刪除)的詳細內容,更多關于MySQL 處理重復數據的資料請關注真格學網其它相關文章!

其實你會用英文搜索的話?梢院芊奖阍趕tack overflow上 找到相關的信息 真的學CS的就不要用百度了 用google你會發現一個不一樣的世界的隨便貼一個sql-How can I remove duplicate rows?稍微講一下其中一個思路(里面有很多很好的答案 你可以自己去看)就是做一個group by 保留其中id 最大的(你說自增長 id最大的應該就是最新的)就可以了具體sql query 可以這樣寫delete from test where id not inselect name,email,max(id)from testgroup by name,email having id is not null)內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • mysql查找刪除表中重復數據方法總結
  • mysql查詢重復數據(刪除重復數據保留id最小的一條為唯一數據)
  • mysql根據某一個或者多個字段查找重復數據的sql語句
  • mysql刪除重復數據保留最小的id 的解決方法
  • 刪除mysql重復數據的方法
  • mysql 刪除數據庫中重復數據方法小結
  • mysql查詢排序與查詢聚合函數用法分析
  • 詳解數據庫多表連接查詢的實現方法
  • mysql密碼忘了怎么辦?mysql重置root密碼方法
  • mysql 服務器參數說明及查看 設置方法
  • ubuntu server下mysql數據庫備份腳本代碼
  • mysql limit使用方法以及超大分頁問題解決
  • mysql中主從復制重復鍵問題修復方法
  • mysql中的btree與hash索引比較
  • win下mysql5.6升級到5.7的方法
  • mysql 觸發器創建與使用方法示例
  • mysql如何去除兩個字段數據相同的記錄
  • mysql 多個字段有重復數據, 我需要進行去重處理
  • mysql查詢兩個字段下重復數據的刪除方法
  • 怎么刪除重復的Mysql數據?
  • 在mysql中怎么除去重復數據
  • mysql 兩個表聯合查詢數據條數,并要除去重復的數據
  • mysql刪除重復數據只保留一條如何實現?
  • mysql怎么合并兩個有重復數據的表?
  • mysql數據庫怎么去除重復數據
  • mysql left join 右表存在重復數據,怎么處理
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁mysql查找刪除表中重復數據方法總結mysql查詢重復數據(刪除重復數據保留id最小的一條為唯一數據)mysql根據某一個或者多個字段查找重復數據的sql語句mysql刪除重復數據保留最小的id 的解決方法刪除mysql重復數據的方法mysql 刪除數據庫中重復數據方法小結mysql查詢排序與查詢聚合函數用法分析詳解數據庫多表連接查詢的實現方法mysql密碼忘了怎么辦?mysql重置root密碼方法mysql 服務器參數說明及查看 設置方法ubuntu server下mysql數據庫備份腳本代碼mysql limit使用方法以及超大分頁問題解決mysql中主從復制重復鍵問題修復方法mysql中的btree與hash索引比較win下mysql5.6升級到5.7的方法mysql 觸發器創建與使用方法示例mysql安裝圖解 mysql圖文安裝教程can""""t connect to mysql servwindows下mysql5.6版本安裝及配置mysql字符串截取函數substring的mysql創建用戶與授權方法mysql提示:the server quit withmysql——修改root密碼的4種方法mysql日期數據類型、時間類型使用mysql update語句的用法詳解mysql 的case when 語句使用說明mysql常用操作sql語句匯總mysql修改root賬號密碼的方法redhat6.5/centos6.5安裝mysql5.7.20的教ubuntu手動安裝mysql5.7.10mysql null 值處理實例詳解mysql myisam 優化設置設置mysql5.7.18安裝時mysql服務啟動失敗的解mysql學習第四天 windows 64位系統下使用mysql如何避免全表掃描的方法mysql數據庫索引損壞及修復經驗分享
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载