国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

數據庫高并發情況下重復值寫入的避免 字段組合約束

2024-08-31 00:59:20
字體:
來源:轉載
供稿:網友
10線程同時操作,頻繁出現插入同樣數據的問題。雖然在插入數據的時候使用了:
insert inti tablename(fields....) select @t1,@t2,@t3 from tablename where not exists (select id from tablename where t1=@t1,t2=@t2,t3=@t3)
當時還是在高并發的情況下無效。此語句也包含在存儲過程中。(之前也嘗試線判斷有無記錄再看是否寫入,無效)。

因此,對于此類情況還是需要從數據庫的根本來解決,就是約束。否則數據庫的原子操作細不到我所需要的層面。
添加約束的命令行用得人不多,網上每次找SQL語句都累死,還是寫下來好了。
需要的關鍵就叫做 字段組合約束唯一性
alter table tablename add CONSTRAINT NewUniqueName Unique(t1,t2,t3)
這樣可以保證三個字段組合不重復
在生產系統數據庫的調整真是錙銖必較。。。。。。
對于數據庫讀操作的重復暫時沒有好的解決方法,就是讀數據庫某些條目同時將這些條目某個字段修改為1,然后其他進程讀的時候就不會重復讀取。但是在多線程情況下即使我使用了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)
還是會造成重復讀。難道沒有更好的辦法了嗎?

如果大家有更好的方法,可以發出來。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澎湖县| 宁陕县| 金寨县| 舟曲县| 托里县| 红安县| 永年县| 留坝县| 铜陵市| 三门峡市| 林西县| 磐安县| 南昌市| 余干县| 许昌县| 新干县| 福鼎市| 辽宁省| 和田市| 白山市| 名山县| 汾阳市| 灵宝市| 陇西县| 明溪县| 堆龙德庆县| 南宫市| 根河市| 道真| 河津市| 万年县| 贵定县| 十堰市| 平潭县| 海门市| 溧阳市| 锦屏县| 喀喇| 长岭县| 鄂尔多斯市| 郯城县|