由於在做壓力測試,同一時間占用的問題。
兩個用戶同時下同一時間的訂單,需要增加校驗,第一個能保存的用戶保存,第二個就不能讓保存了。
問題是通過代碼,怎么都做不到毫秒級校驗,所以解決辦法就只能是通過數據庫的唯一校驗了。
首先是把指定的兩個字段增加唯一約束,我的場景是選擇的美發師和預約的時間兩個字段
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
空的問題解決了,還有之前垃圾數據,有重復的。

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