假設有A、B兩個人同時用同一個賬號分別下金額為50和60的訂單,但是賬號余額只有100,如果不做處理,他們下訂單都會成功。問:做一個怎樣的簡單處理。
uj5u.com熱心網友回復:
行級鎖,做一個鎖啊uj5u.com熱心網友回復:
-- 只有一個會成功
-- 會話1
update t set num = num - 50 where num >= 50 ;
-- 會話2
update t set num = num - 60 where num >= 60 ;
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
將這個欄位加上約束,不能小于零就行,那么
update t set num = num - 50 where id=user_id;
update t set num = num - 50 where id=user_id;
這兩個SQL對應的會話一個會成功,另一個會報違反該約束的錯誤,違反該約束的時候程式就可以回傳余額已不足的提示,同時用戶還可以重新查看最新賬戶余額。 如果按照水果給的SQL,第一沒有考慮用戶ID,會扣所有用戶的錢,另一方面程式得去判斷UPDATE到底更新了沒有,說白了就是你執行陳述句后因為沒有報錯,所有根本不知道到底扣沒有扣錢,得去檢驗陳述句執行結果,要不然都會成功。
uj5u.com熱心網友回復:
-- 只有一個會成功
-- 會話1
update t set num = num - 50 where num >= 50 ;
-- 會話2
update t set num = num - 60 where num >= 60 ;
兩個都會成功,假設資料庫只要一條資料的話,一個修改了會話修改了1條資料,一個會話修改了0條資料。
uj5u.com熱心網友回復:
-- 只有一個會成功
-- 會話1
update t set num = num - 50 where num >= 50 ;
-- 會話2
update t set num = num - 60 where num >= 60 ;
這個方法很嚴密,也很簡單
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109193.html
標籤:開發
