SQL 建立多個字段唯一性校驗


由於在做壓力測試,同一時間占用的問題。

兩個用戶同時下同一時間的訂單,需要增加校驗,第一個能保存的用戶保存,第二個就不能讓保存了。

問題是通過代碼,怎么都做不到毫秒級校驗,所以解決辦法就只能是通過數據庫的唯一校驗了。

首先是把指定的兩個字段增加唯一約束,我的場景是選擇的美發師和預約的時間兩個字段

ALTER TABLE PaasOLT_Order ADD CONSTRAINT BarberTimeUni unique(BarberId,ServiceTime)

第一個語句就碰壁了,報錯

真尷尬,好奇怪的報錯,經過調查發現

想要設置成唯一性約束的字段,不能是NVARCHAR(MAX)的,索引的鍵不能超過 900字節的總大小。將數據類型更改為 NVARCHAR(450) 

好吧,那就改下吧

ALTER TABLE PaasOLT_Order ALTER COLUMN BarberId nvarchar(32) NULL;

繼續尷尬,還是報錯

這個就比較好理解了,就跟你在后期修改一個字段為非空字段的時候,得保證這個列的值都不能是null,並且也不能重復。

至於解決這個問題,就得給現有的數據改成非空。

update PaasOLT_Order set BarberId = (select id from sysUser su where su.truename = paasolt_order.servicename)
where BarberId is null

update PaasOLT_Order set BarberId = Id
where BarberId is null

update PaasOLT_Order set ServiceTime = CONVERT(varchar(100), CreateTime, 120)
where ServiceTime is null

空的問題解決了,還有之前垃圾數據,有重復的。

再處理下,把之前重復的數據清掉

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM