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
的最大好處就是可以將delete
和insert
合二為一,形成乙個原子操作。這樣就可以不必考慮在同時使用delete
和insert
時新增事務等複雜操作了。
在使用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...