MySQL去重插入方法

2021-10-19 01:19:44 字數 2536 閱讀 7729

向資料庫插入資料,希望去重插入。

一般去重插入有兩種策略:

重複不插入

重複則替換(更新)

準備表:

create

table

`user_info`

(`id`

int(11)

notnull

comment

'id'

,`username`

varchar(50

)character

set utf8 collate utf8_general_ci not

null

comment

'姓名'

,`idcard`

varchar(50

)character

set utf8 collate utf8_general_ci not

null

comment

'身份證號'

,`nick_name`

varchar(50

)character

set utf8 collate utf8_general_ci null

default

null

comment

'暱稱'

,`remark`

varchar(50

)character

set utf8 collate utf8_general_ci null

default

null

comment

'備註'

,primary

key(

`id`

)using

btree

,unique

index

`idcard`

(`idcard`

)using

btree

comment

'唯一身份標識'

)engine

=innodb

character

set= utf8 collate

= utf8_general_ci row_format = dynamic;

其中 id 是主鍵, idcard是唯一索引。

2.1 重複不插入策略

2.1.1 ignore

-- insert ignore

insert

ignore

into user_info (id, username, idcard, nick_name)

values(3

,'zhangsan'

,'002',''

);

此方案要求有主鍵或唯一索引,且是主鍵或唯一索引重複方可觸發。

2.1.2 條件判斷

-- not exists 與ignore類似 重複則不插入

insert

into user_info (id, username, idcard, nick_name)

select1,

'張無忌'

,'001'

,'-'

from dual where

notexists

(select idcard from user_info where idcard =

'001'

);

此方案不需要主鍵或唯一索引,當滿足不存在條件時,執行插入

2.2 重複替換策略

2.2.1 on duplicate key update

-- on duplicate key update

insert

into user_info (id, username, idcard, nick_name)

values(3

,'zhangsan'

,'002'

,'哈哈')on

duplicate

keyupdate username =

'王五3'

,nick_name =

'李白'

;

此方案要求有主鍵或唯一索引,且是主鍵或唯一索引重複方可觸發。

注意:條件觸發後,將是後面update語句生效。

2.2.2 replace into

-- replace into

replace

into user_info (id, username, idcard, nick_name)

values(1

,'張無忌'

,'001'

,'-'

);

此方案要求有主鍵或唯一索引,且是主鍵或唯一索引重複方可觸發。觸發後將替換原有資料。

另外,重複替換策略語句生效後將造成兩條資料影響。

mysql幾種插入方法

開發中遇到的場景 匯入excel檔案,根據主鍵判斷,如果有重複資料時更新,沒有重複資料則插入,計算匯入資料總條數,新入庫資料條數及更新資料條數。最開始用的是 insert into table name field1,field2,fieldn values value1,value2,valuen...

SQL SERVER 批量資料插入方法

在sql server 中插入一條資料使用insert語句,但是如果想要批量插入一堆資料的話,迴圈使用insert不僅效率低,而且會導致sql一系統效能問題。下面介紹sql server支援的兩種批量資料插入方法 bulk和錶值引數 table valued parameters 執行下面的指令碼,...

關於mysql資料庫快速插入方法

寫技術類文章出於三個目的,第一,對自己寫過的東西做一次總結,溫故而知新,第二,希望好友中的大神門對小弟的方法加以改進和建議,第三,對於剛入門的程式設計師提供有限的建議和方法,人幫我,我幫人 關於mysql 的插入語句,大家最熟悉不過了,下面這兩句語句實現對mysql資料庫的插入 sprintf qu...