謹慎使用 IF NOT EXISTS()INSERT

**謹慎使用**

今天記錄一個很基礎的問題,可是這個問題貽害不淺併發

if not exists (select 1 from [dbo].[M_USER] where OpenId=@OpenId) begin insert into [dbo].[M_USER] (OpenId) values(@OpenId) endide

上面這個語句並不能阻止重複數據,本身debug的時候是沒問題的,當並高併發的時候就會有問題。若是必定要這麼晚,必須在外面加上事務。或者改寫成下面的語句。

insert into [dbo].[M_USER] (OpenId) select @OpenId where not exists  (select 1 from [dbo].[M_USER] where OpenId=@OpenId)高併發

相關文章
相關標籤/搜索