insert 語句的一部分,如果指定 on duplicate key update ,並且插入行後會導致在乙個unique索引或primary key中出現重複值,則在出現重複值的行執行update,如果不會導致唯一值列重複的問題,則插入新行
sql 語句原型:
insert
into
table
(player_id,award_type,num)
values
(20001,0
,1)on
duplicate
keyupdate num=num+
values
(num)
在工作中**程式需要模仿王者榮耀鑽石奪寶(滿200幸運值 201抽中大獎 )
實現思路:
如果沒有使用者幸運值改變+1 ,新錶中沒有使用者資訊就新增
1、判斷使用者資訊是否存在 (不存在新增)
2、存在修改使用者幸運值個數
為了預防高併發下 兩層sql出現問題
原sql :
select num from 表名 where uid=
20001
and award_type=
0limit1;
update 表名 set num=num+
1where uid=
20001
and award_type=
0
需求:
uid和award_tyhpe兩個字段值 都相同時才更新 其中有乙個不一樣就新增新資料
效果展示:
執行語句
將player_id 、award_type 建立 聯合unique 索引
create
table
`willow_player`
(`id`
bigint(11
)not
null
auto_increment
,`player_id`
bigint(16
)not
null
default
'0',
`num`
int(11)
notnull
default
'0',
`award_type`
tinyint(4
)not
null
default
'0'comment
'型別'
,`repeat_num`
smallint(11
)not
null
default
'0'comment
'重複輪數'
,primary
key(
`id`),
unique
key`num`
(`player_id`
,`award_type`
)using
btree
)engine
=innodb
auto_increment=96
default
charset
=utf8mb4;
這樣只有兩個字段值內容全部一樣時才會更新!!! 注意 id 會跳躍哦 mysql 機制原因
方式二:
在向表中插入資料的時候,經常遇到這樣的情況:1. 首先判斷資料是否存在; 2. 如果不存在,則插入;3.如果存在,則更新。
在 sql server 中可以這樣處理:
if
notexists
(select
1from t where id =1)
insert
into t(id, update_time)
values(1
, getdate())
else
update t set update_time = getdate(
)where id =
1
那麼 mysql 中如何實現這樣的邏輯呢?別著急!mysql 中有更簡單的方法:replace into
replace
into t(id, update_time)
values(1
,now()
);
或
replace
into t(id, update_time)
select1,
now(
);
replace into跟 insert 功能類似,不同點在於:replace into首先嘗試插入資料到表中, 1. 如果發現表中已經有此行資料(根據主鍵或者唯一索引判斷)則先刪除此行資料,然後插入新的資料。 2. 否則,直接插入新資料。
要注意的是:插入資料的表必須有主鍵或者是唯一索引!否則的話,replace into會直接插入資料,這將導致表中出現重複的資料。
replace
into tbl_name(col_name,..
.)values(.
..)replace
into tbl_name(col_name,..
.)select..
.replace
into tbl_name set col_name=
value,.
..
前兩種形式用的多些。其中 「into」 關鍵字可以省略,不過最好加上 「into」,這樣意思更加直觀。另外,對於那些沒有給予值的列,mysql 將自動為這些列賦上預設值。 不存在 MySQL資料存在就更新,不存在就新增
做業務系統,經常遇到初始化一些資料,但如果每次都檢查就比較麻煩,下面的方法可以解決類似的問題。使用on duplicate插入的字段中必須有唯一約束,否則會出現重複值 目前表中沒有唯一約束,執行兩遍插入語句,會出現兩個重複資料,id為49的jerry和id為50的jerry,並沒有達到修改的目的,將...
MYSQL存在既更新,不存在就新增 T SQL
create table tm customer sap log id bigint 36 not null auto increment comment id partner varchar 64 not null default comment 客戶編號 name org1 varchar 64...
Mysql 存在既更新,不存在就新增(sql語句)
insert 語句的一部分,如果指定 on duplicate key update 並且插入行後會導致在乙個unique索引或primary key中出現重複值,則在出現重複值的行執行update,如果不會導致唯一值列重複的問題,則插入新行 sql 語句原型 insert into table p...