Mysql 併發插入 存在不插入,存在更新操作

2021-09-26 10:15:26 字數 1669 閱讀 2479

我們遇到挺多這樣的問題,當使用者併發提交資料,重複提交資料。導致資料重複,或者  mysql

sql  報錯。

幾種解決辦法,對應到幾種業務場景。

這個應該是最常見的處理方式,是醉不安全的,因為一旦有併發其實完全防止不了,來看看偽**。

entity

entity

=service

.findbyid(10

);

if

(null

==entity

)else

先根據條件查詢,存在就更新,不存在新增,但是往往我們是集群、多列的狀態下,會再你正在判斷null == entity的時候,另外乙個執行緒已經插入完畢了,導致你以為是不存在,重複插入。

我們平常的insert intosql  是這麼寫:

insert into demo_in(a

,b,c

)values

(123,2

,4);

比如c是主鍵,插入2次就會丟擲異常:

[

23000

][1062

]duplicate

entry

'4'for

key

'primary'

所以我們用到replace關鍵字,他的作用如題,存在即更新,不存在即插入,和delete+insert into一樣。但是它乙個原子操作,是一步完成,所以我們不用擔心有其他問題的出現,但是使用replace的時候,一定要保證表有唯一主鍵。

重要:執行replace語句後,系統返回了所影響的行數,如果返回1,說明在表中並沒有重複的記錄,如果返回2,說明有一條重覆記錄,系統自動先呼叫了delete刪除這條記錄,然後再記錄用insert來插入這條記錄。

改造一下上面的語句就是:

replace into demo_in(a

,b,c

)values

(123,2

,4);

這個其實很簡單,因為  mysql  不能做到插入的時候帶where條件,故用了一張臨時表來處理。

insert into demo_in(a

,b,c

)select

123,2,

4from dual where not exists

(select c from demo_in where c =4

);

用臨時表dual來標記資料,然後插入到demo_in表中。條件是c=4,並且not exists,也就是當c=4條件滿足,則不插入。

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

mysql表中,有個聯合唯一索引 create table news visite id int 11 notnull auto increment comment 主鍵 news id bigint 11 default null comment 資訊id user id bigint 11 de...

存在就不插入 sqlserver插入資料

1 指定所要插入資料的列 insert into table name 列1,列2,values 值1,值2,insert into stu xm,xb,csrq,sfzh,age,lxdh,address,jxj,create time values 張三 男 1995 5 6 101101199...

mssql不存在便插入存在不執行操作

參考 在mssql中,在記錄不存在時插入記錄,如果存在則不執行操作 相關語句 建立表create table users userid varchar 50 primary key,username nvarchar 20 age intnot null 直接插入 insert into users...