Mysql 存在既更新,不存在就新增(sql語句)

2021-09-01 02:48:22 字數 2494 閱讀 4636

insert 語句的一部分,如果指定 on duplicate key update ,並且插入行後會導致在乙個unique索引或primary key中出現重複值,則在出現重複值的行執行update,如果不會導致唯一值列重複的問題,則插入新行

sql 語句原型:

insert into table (player_id,award_type,num)  values(20001,0,1) on  duplicate key update num=num+values(num)

在工作中**程式需要模仿王者榮耀鑽石奪寶(滿200幸運值  201抽中大獎  )

實現思路:

如果沒有使用者幸運值改變+1  ,新錶中沒有使用者資訊就新增

1、判斷使用者資訊是否存在 (不存在新增)

2、存在修改使用者幸運值個數

為了預防高併發下 兩層sql出現問題

原sql :  

select  num  from 表名 where  uid=20001 and  award_type=0 limit 1;

update 表明 set  num=num+1 where  uid=20001 and  award_type=0

需求:uid和award_tyhpe兩個字段值 都相同時才更新  其中有乙個不一樣就新增新資料

效果展示:

執行語句  insert into table (player_id,award_type,num)  values(20001,0,1) on  duplicate key update num=num+values(num)

insert into table (player_id,award_type,num)  values(20011,0,1) on  duplicate key update num=num+values(num)

將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) not null 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 機制原因

方式二:

討人喜歡的 mysql replace into 用法(insert into 的增強版)

在向表中插入資料的時候,經常遇到這樣的情況:1. 首先判斷資料是否存在; 2. 如果不存在,則插入;3.如果存在,則更新。

在 sql server 中可以這樣處理:

if not exists (select 1 from 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) select 1, now();

replace into 跟 insert 功能類似,不同點在於:replace into 首先嘗試插入資料到表中, 1. 如果發現表中已經有此行資料(根據主鍵或者唯一索引判斷)則先刪除此行資料,然後插入新的資料。 2. 否則,直接插入新資料。

要注意的是:插入資料的表必須有主鍵或者是唯一索引!否則的話,replace into 會直接插入資料,這將導致表中出現重複的資料。

mysql replace into 有三種形式:

1. replace into tbl_name(col_name, ...) values(...)

2. replace into tbl_name(col_name, ...) select ...

3. 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...