向資料庫插入資料,希望去重插入。
一般去重插入有兩種策略:
重複不插入
重複則替換(更新)
準備表:
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...