mysql實現「存在即更新,不存在即插入」

2021-09-25 09:45:56 字數 956 閱讀 4799

方法1:使用replace關鍵字

replace是insert的增強版,可以實現插入的資料和已存在的資料發生主鍵或者唯一鍵重複,則刪除已存在的資料,再實現插入,如果不重複,則直接插入資料。

結合mybatis批量處理,用法如下:

replace into

schooltable(id,describedataform,childrenid,relevanceid,showtype)

values(#,

#,#,#,#

)

方法2:使用on duplicate key update

該方法能夠在主鍵或者唯一鍵重複時,修改原記錄中某字段的資料。

結合mybatis批量處理,用法如下:

insert into

schooltable(id,describedataform,childrenid,relevanceid,showtype)

values(#,

#,#,#,#

)on duplicate key update

describedataform=values(describedataform),

childrenid=values(childrenid),

relevanceid=values(relevanceid),

showtype=values(showtype)

效能區別:

正如replace底層實現所示,如果主鍵重複會先刪除資料庫中原來的記錄,插入新紀錄。但是資料庫刪除操作需要維護主鍵索引,這無疑需要消耗效能。

on duplicate ket qpdate只是在主鍵重複時修改所需字段的值,所以不影響主鍵。維護成本自然相對於replace低。

注意:在資料量較小時,兩者效率大致相同,都很快,但是出現大量資料(百萬級別)時,差異就顯示出來了。

mysql存在更新不存在新增

1 插入一條資料,存在則不操作,不存在就插入 必須現有唯一鍵 使用insert ignore語句 insert ignore into table col1,col2 values a b 例如插入資料 insert ignore into user info last name,first nam...

不存在 MySQL資料存在就更新,不存在就新增

做業務系統,經常遇到初始化一些資料,但如果每次都檢查就比較麻煩,下面的方法可以解決類似的問題。使用on duplicate插入的字段中必須有唯一約束,否則會出現重複值 目前表中沒有唯一約束,執行兩遍插入語句,會出現兩個重複資料,id為49的jerry和id為50的jerry,並沒有達到修改的目的,將...

sql 存在更新,不存在插入

1 語法 if exists select from users where name 張三 print 1 else print 02 建表語句 create table dbo users id int not null identity 1,1 name varchar 50 null var...