數(shù)據(jù)庫高并發(fā)情況下重復(fù)值寫入的避免 字段組合約束
insert inti tablename(fields....) select @t1,@t2,@t3 from tablename where not exists (select id from tablename where t1=@t1,t2=@t2,t3=@t3)
當(dāng)時還是在高并發(fā)的情況下無效。此語句也包含在存儲過程中。(之前也嘗試線判斷有無記錄再看是否寫入,無效)。
因此,對于此類情況還是需要從數(shù)據(jù)庫的根本來解決,就是約束。否則數(shù)據(jù)庫的原子操作細(xì)不到我所需要的層面。
添加約束的命令行用得人不多,網(wǎng)上每次找SQL語句都累死,還是寫下來好了。
需要的關(guān)鍵就叫做 字段組合約束唯一性
alter table tablename add CONSTRAINT NewUniqueName Unique(t1,t2,t3)
這樣可以保證三個字段組合不重復(fù)
在生產(chǎn)系統(tǒng)數(shù)據(jù)庫的調(diào)整真是錙銖必較。。。。。。
對于數(shù)據(jù)庫讀操作的重復(fù)暫時沒有好的解決方法,就是讀數(shù)據(jù)庫某些條目同時將這些條目某個字段修改為1,然后其他進(jìn)程讀的時候就不會重復(fù)讀取。但是在多線程情況下即使我使用了SQL SERVER 2005最新的特性,就是類似update...output into到臨時表的方法:
update tablename set OnCheck=1,LastLockTime=getdate(),LastChecktime=getdate()
output deleted.ID into @newtb
where ID in
(select id from tablename where Oncheck=0)
還是會造成重復(fù)讀。難道沒有更好的辦法了嗎?
如果大家有更好的方法,可以發(fā)出來。
相關(guān)文章
sql ntext數(shù)據(jù)類型字符替換實現(xiàn)代碼
sql ntext數(shù)據(jù)類型字符替換實現(xiàn)代碼,需要的朋友可以參考下。2011-09-09數(shù)據(jù)庫觸發(fā)器DB2和SqlServer有哪些區(qū)別
大部分?jǐn)?shù)據(jù)庫語句的基本語法是相同的,但具體到的每一種數(shù)據(jù)庫,又有些不一樣,例如觸發(fā)器,DB2和SQL Server兩種很大的不同。對數(shù)據(jù)庫觸發(fā)器DB2和SqlServer有哪些區(qū)別感興趣的朋友一起看看本文吧2015-11-11數(shù)據(jù)庫中經(jīng)常用到的操作和管理數(shù)據(jù)庫的語句總結(jié)
數(shù)據(jù)庫中經(jīng)常用到的操作和管理數(shù)據(jù)庫的語句,感謝作者的辛勤勞動,很多。2010-06-06sqlserver數(shù)據(jù)庫危險擴(kuò)展刪除和恢復(fù)代碼
今天為了實現(xiàn)sqlserver的復(fù)制功能,因為以前刪除了很多的sqlserver的一些會導(dǎo)致不安全因素的擴(kuò)展,導(dǎo)致很多功能無法用,沒有辦法需要重新的恢復(fù)擴(kuò)展。2010-07-07Microsoft SQL Server 2012 數(shù)據(jù)庫安裝圖解教程
這篇文章主要為大家介紹下Microsoft SQL Server 2012 數(shù)據(jù)庫安裝教程,需要的朋友可以參考下2013-11-11圖解SSIS批量導(dǎo)入Excel文件的實現(xiàn)方法
本篇文章是對SSIS批量導(dǎo)入Excel文件的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06SQLSERVER數(shù)據(jù)備份文件的分割備份方法
這篇文章主要介紹了SQLSERVER數(shù)據(jù)備份文件的分割備份方法 ,需要的朋友可以參考下2014-12-12SQL Server誤區(qū)30日談 第20天 破壞日志備份鏈之后,需要一個完整備份來重新開始日志鏈
事務(wù)日志備份會備份自上次事務(wù)日志備份以來所有的事務(wù)日志(如果從來沒有過日志備份的話,那就從上一次完整備份開始)。有好幾種類型的操作會中斷事務(wù)日志的連續(xù)性,也就是說除非重新開始新的日志鏈,SQL Server無法再進(jìn)行日志備份2013-01-01