Mysql插入資料,存在則更新,否則插入

2021-10-05 06:03:19 字數 2401 閱讀 3619

mysql表中,有個聯合唯一索引

create

table

`news_visite`

(`id`

int(11)

notnull

auto_increment

comment

'主鍵'

,`news_id`

bigint(11

)default

null

comment

'資訊id'

,`user_id`

bigint(11

)default

null

comment

'使用者id'

,`read_time`

datetime

default

null

comment

'瀏覽時間'

,primary

key(

`id`

)using

btree

,unique

key`unikey`

(`news_id`

,`user_id`

)using

btree

comment

'唯一索引,不存在則插入,已存在則更新'

)engine

=innodb

auto_increment

=6880

default

charset

=utf8mb4 comment

='作品瀏覽記錄'

;

方式一:

insert...on duplicate key update,如果指定了on duplicate key update,並且插入行後會導致在乙個unique索引primary key出現重複值,則執行update

mybatis xml,傳入listnewsids,long userid,date readtime

"insertorupdate"

>

insert into news_visite (news_id, user_id, read_time)

values

collection

="newsids"

item

="id"

open

="("

separator

="),("

close

=")"

>

#,#,#

foreach

>

on duplicate key update read_time = now()

insert

>

方式二:

replace關鍵字,使用replace的最大好處就是可以將deleteinsert合二為一,形成乙個原子操作。這樣就可以不必考慮在同時使用deleteinsert時新增事務等複雜操作了。

在使用replace時,表中必須有唯一索引,而且這個索引所在的字段不能允許空值,否則replace就和insert完全一樣的。

在執行replace後,系統返回了所影響的行數,如果返回1,說明沒有重複的記錄,如果返回2,說明有重覆記錄,系統先delete這條記錄,然後再insert這條記錄。

語法和insert非常的相似,如下面的replace語句是插入或更新一條記錄。

mybatis xml,傳入listnewsids,long userid,date readtime

"insertorupdate"

>

replace insert into news_visite (news_id, user_id, read_time)

values

collection

="newsids"

item

="id"

open

="("

separator

="),("

close

=")"

>

#,#,#

foreach

>

insert

>

MySQL記錄存在則更新,不存在則插入

create table tb file authorize authorize id int 11 not null auto increment,str id int 11 default null comment 使用者標識 file id int 11 default null commen...

MySql 不存在則插入,存在則更新或忽略

前言 在插入資料時,可能需要忽略或替換掉重複的資料 依據某個字段 這時可以在應用層處理,也可以使用複雜的 sql 語句來處理 如果僅僅知道一些簡單的 sql 語法的話 當然也可以使用一些簡單的 sql 語法,不過它並不是通用所有的資料庫型別。以下所有例項僅針對mysql而言,並不能隨意用於其它資料庫...

mysql 11 若不存在則插入,存在則更新

參考 需求 有乙個裝置,當該裝置狀態發生變更時把狀態資訊插入資料庫,若已記錄該裝置就更新狀態,不存在則插入狀態資訊 解決方法 1.建立一張表,改表有兩個字段 create table device state device id varchar 200 null comment 裝置id state...