mysql 忽略主鍵衝突 避免重複插入的幾種方式

2021-06-22 00:37:37 字數 1337 閱讀 4719

方案一:使用 ignore 關鍵

字如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重複插入記錄可以使用:

insert ignore into table_name(email,phone,user_id) values('[email protected]','99999','9999'),這樣當有重複記

錄就會忽略,執行後返回數字0,還有個應用就是複製表,避免重覆記錄:

insertignore into table(name)  select  name from table2

replace的語法格式為:

1. replace into table_name(col_name, ...) values(...) 

2. replace into table_name(col_name, ...) select ... 

3. replace into table_name set col_name=value, ...

演算法說明:

replace的執行與insert很相像,但是如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,即:

1.    嘗試把新行插入到表中 

2.    當因為對於主鍵或唯一關鍵字出現重複關鍵字錯誤而造成插入失敗時:

從表中刪除含有重複關鍵字值的衝突行

再次嘗試把新行插入到表中

舊記錄與新記錄有相同的值的判斷標準就是:表有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義 。

該語句會與insert相同,因為沒有索引被用於確定是否新行複製了其它的行。

返回值:

replace語句會返回乙個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和。

受影響的行數可以容易地確定是否replace只新增了一行,或者是否replace也替換了其它行:檢查該數是否為1(新增)或

更大(替換)。

示例:

eg:(phone欄位為唯一索引)

replace  into table_name(email,phone,user_id) values('test569','99999','123')

另外:在 sql server 中可以這樣處理:

if not exists (select phone from t where phone= '1')

insert into t(phone, update_time) values('1', getdate())

else

update t set update_time = getdate() where phone= '1'

更多資訊請看:

mysql忽略主鍵衝突,避免重複插入的幾種方式

本文章來給大家提供三種在mysql中避免重複插入記錄方法,主要是講到了ignore,replace,on duplicate key update三種方法,有需要的朋友可以參考一下 方案一 使用ignore關鍵字 如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性 如果沒有唯一索引...

Mysql衝突更新 mysql 主鍵衝突更新

mysql的特殊功能,在主鍵衝突的情況下,可以根據主鍵進行更新資料 建表語句 全量指令碼 建立表 tb day hold 持倉表 的當前表 select create table tb day hold 持倉表.drop table if exists tb day hold create tabl...

MySql避免重複插入記錄 根據主鍵判重

今天用python抓取資料入庫需要避免重複資料插入,在網上找了一些方法 方案一 使用ignore關鍵字 如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重複插入記錄可以使用 insert ignore into table name email,phone,user id ...