MySQL字段自增自減的SQL語句示例介紹
更新時(shí)間:2014年02月07日 11:49:43 作者:
MySQL的自增語句大家應(yīng)該都很熟悉,本文為大家介紹下MySQL字段自增自減的SQL語句,需要的朋友可以參考下
MySQL的自增語句大家應(yīng)該都很熟悉 也很簡(jiǎn)單
update `info` set `comments` = `comments`+1 WHERE `id` = 32
這樣就可以了,但是有時(shí)候我們會(huì)涉及到做減法,
例如:文章的評(píng)論數(shù),在刪除或者鎖定了一條評(píng)論之后需要對(duì)該文章總評(píng)論數(shù)減一
comments smallint(5) unsigned 文章評(píng)論總數(shù)統(tǒng)計(jì)字段 無符號(hào)即 0 ~ 65535 之間的數(shù)值
1. 通常情況下是可以類似上面自增的方法 把 +號(hào) 改成 -號(hào) 就行了,但問題是如果當(dāng)前 comments 統(tǒng)計(jì)數(shù)值為 0 時(shí) 再做減法將會(huì)變成該字段類型的最大數(shù)值 65535
update `info` set `comments` = `comments`-1 WHERE `id` = 32
2. 為避免這個(gè)問題一般的想法只能是先根據(jù) id 主鍵查詢出文章 comments 統(tǒng)計(jì)字段值,再通過PHP做減法,然后再 update 一次,前后總共需要執(zhí)行兩次SQL命令
今天google查了下沒找到這方面的資料,看了看MySQL的語法函數(shù)等等。。。試了下面的語句可以直接一條語句完成,也就是加個(gè) if 判斷,如下示例:
update `info` set `comments` = IF(`comments`< 1,0,`comments`-1) WHERE `id` = 32
默認(rèn)comments為0時(shí), comments-1 = 65535;但測(cè)試了下 如果直接 判斷 comments-1=65535 好像不行,不知道什么原因,對(duì)這個(gè)不是很熟悉不知道是不是 這里的 if 不支持 = 號(hào),但是 comments-1 >= 65535 可以成立,于是當(dāng) comments 為 0 時(shí),IF(`comments`-1>=65535,0,`comments`-1) 將返回 0提示:最大數(shù)值 65535 是 smallint 無符號(hào)狀態(tài)下的最大值,其他字段類型請(qǐng)進(jìn)行相應(yīng)調(diào)整
----------------------------------------------------------------------------------------------------------------------
2014/02/03 補(bǔ)充:剛開始是這么寫的,后來發(fā)現(xiàn)太笨了,稍微改下:
update `info` set `comments` = IF(`comments`<1, 0, `comments`-1) WHERE `id` = 32
要減x,就判斷是否小于x
復(fù)制代碼 代碼如下:
update `info` set `comments` = `comments`+1 WHERE `id` = 32
這樣就可以了,但是有時(shí)候我們會(huì)涉及到做減法,
例如:文章的評(píng)論數(shù),在刪除或者鎖定了一條評(píng)論之后需要對(duì)該文章總評(píng)論數(shù)減一
comments smallint(5) unsigned 文章評(píng)論總數(shù)統(tǒng)計(jì)字段 無符號(hào)即 0 ~ 65535 之間的數(shù)值
1. 通常情況下是可以類似上面自增的方法 把 +號(hào) 改成 -號(hào) 就行了,但問題是如果當(dāng)前 comments 統(tǒng)計(jì)數(shù)值為 0 時(shí) 再做減法將會(huì)變成該字段類型的最大數(shù)值 65535
復(fù)制代碼 代碼如下:
update `info` set `comments` = `comments`-1 WHERE `id` = 32
2. 為避免這個(gè)問題一般的想法只能是先根據(jù) id 主鍵查詢出文章 comments 統(tǒng)計(jì)字段值,再通過PHP做減法,然后再 update 一次,前后總共需要執(zhí)行兩次SQL命令
今天google查了下沒找到這方面的資料,看了看MySQL的語法函數(shù)等等。。。試了下面的語句可以直接一條語句完成,也就是加個(gè) if 判斷,如下示例:
復(fù)制代碼 代碼如下:
update `info` set `comments` = IF(`comments`< 1,0,`comments`-1) WHERE `id` = 32
默認(rèn)comments為0時(shí), comments-1 = 65535;但測(cè)試了下 如果直接 判斷 comments-1=65535 好像不行,不知道什么原因,對(duì)這個(gè)不是很熟悉不知道是不是 這里的 if 不支持 = 號(hào),但是 comments-1 >= 65535 可以成立,于是當(dāng) comments 為 0 時(shí),IF(`comments`-1>=65535,0,`comments`-1) 將返回 0提示:最大數(shù)值 65535 是 smallint 無符號(hào)狀態(tài)下的最大值,其他字段類型請(qǐng)進(jìn)行相應(yīng)調(diào)整
----------------------------------------------------------------------------------------------------------------------
2014/02/03 補(bǔ)充:剛開始是這么寫的,后來發(fā)現(xiàn)太笨了,稍微改下:
復(fù)制代碼 代碼如下:
update `info` set `comments` = IF(`comments`<1, 0, `comments`-1) WHERE `id` = 32
要減x,就判斷是否小于x
相關(guān)文章
mysql now()函數(shù)調(diào)用系統(tǒng)時(shí)間不對(duì)的解決方法
mysql的now()函數(shù)與實(shí)際時(shí)間不符,本文就詳細(xì)的介紹一下mysql now()函數(shù)調(diào)用系統(tǒng)時(shí)間不對(duì)的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2023-05-05
mysql中的int類型對(duì)應(yīng)于java中的Long類型詳解
這篇文章主要介紹了mysql中的int類型對(duì)應(yīng)于java中的Long類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
mysql優(yōu)化小技巧之去除重復(fù)項(xiàng)實(shí)現(xiàn)方法分析【百萬級(jí)數(shù)據(jù)】
這篇文章主要介紹了mysql優(yōu)化小技巧之去除重復(fù)項(xiàng)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了mysql去除重復(fù)項(xiàng)的方法,并附帶了隨機(jī)查詢優(yōu)化的相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
MySQL Administrator 登錄報(bào)錯(cuò)的解決方法
使用MySQL Administrator 登錄,報(bào)錯(cuò): Either the server service or the configuration file could not be found.Startup variable and service section are there for disabled.2010-12-12
MySQL 數(shù)據(jù)庫優(yōu)化的具體方法說明
以下的文章主要講述的是實(shí)現(xiàn)MySQL數(shù)據(jù)庫簡(jiǎn)單實(shí)用優(yōu)化的具體方法,以及在實(shí)際操作中有哪些具體操作步驟是值得我們大家注意的。2010-05-05

