Mysql的sql語句中使用判斷語句遇到的問題

2021-04-29 00:32:58 字數 483 閱讀 3336

mysql開發的過程中,遇到這樣乙個問題:

乙個unsigned的int型別的字段inbox_cnt,要將其值減去乙個值5,為了保證這個欄位不出現負值,我們可以在sql語句中使用if來判斷,語句如下:

update user_cache set inbox_cnt=if(inbox_cnt-5<=0,0,inbox_cnt-5) where user_id='5' limit 1

經過多次測試,發現這樣寫有問題,當inbox_cnt值小於5的時候,更新後的值不是0,而是unsigned的int型別的最大值4294967295。

解決方法:

1、將sql語句修改為:

update user_cache set inbox_cnt=if(5 >= inbox_cnt,0,inbox_cnt-5) where user_id='5' limit 1

2、修改該字段的屬性,將unsigned變為signed。

我最後採用的方法是第一種。

SQl語句中使用佔位符的優點

1.增加sql 可讀性 2.佔位符可以預先編譯,提高執行效率 3.防止sql注入 4用佔位符的目的是繫結變數,這樣可以減少資料sql的硬解析,所以執行效率會提高不少 繫結變數是oracle解決硬解析的首要利器,能解決oltp系統中library cache的過度耗用以提高效能 繫結變數是為了減少解析...

SQl語句中使用佔位符的優點

sql語句中使用佔位符的優點 1.增加sql 可讀性 2.佔位符可以預先編譯,提高執行效率 3.防止sql注入 4用佔位符的目的是繫結變數,這樣可以減少資料sql的硬解析,所以執行效率會提高不少 繫結變數是oracle解決硬解析的首要利器,能解決oltp系統中library cache的過度耗用以提...

sql語句中使用like匹配字段內容

下劃線 與任意單字元匹配。與包含乙個或多個字元的字串匹配。與特定範圍 例如,a f 或特定集 例如,abcdef 中的任意單字元匹配。與特定範圍 例如,a f 或特定集 例如,abcdef 之外的任意單字元匹配。a like mc 將搜尋以字母 mc 開頭的所有字串 如 mcbadden b lik...