MySQL數據庫干貨分享!詳解MySQL如何同時自增自減多個字段


本文將帶大家聊一下如何同時自增自減多個字段

 

開始之前,先分享一套動力節點的老杜講解的MySQL教程👇,小白入門或者學習鞏固都可以看👇

在線觀看鏈接:

最實用的MySQL教程視頻課程 - MySQL - 動力節點在線 (bjpowernode.com)

 

資料、源碼下載:

MySQL視頻教程全套免費下載【適合零基礎入門學習】 - 動力節點 (bjpowernode.com)

前言

最近小Q同學去面試了,然后就問了題目的問題,如何同時自增自減多個字段。

小Q一時回答不出來,最終的結果就是回家等通知…

關於這個問題小編來給小Q簡單的進行解答一下。

一、ThinkPHP框架實現

小Q最熟悉的框架就是ThinkPHP,那么咔咔就先使用ThinkPHP來解決這個問題。

首先,解決這個問題需要對框架的inc和setInc有一定的了解,在框架中也就是使用這倆個函數進行自增或者自減的。

但是倆者是有區別的,inc是Db類中的方法,setInc實際調用的是模型中的方法,但是最終都使用的是thinkphp/library/think/db/Query.php這個文件的方法。

這一塊的源碼就不看了,后邊在說吧!先解決當下問題,小Q很着急的。

大家在寫自增的方法時會不會跟小Q一樣一直都使用的是setInc,小Q拿到這個問題時是這樣想的。

 

 

 

當訪問時會無情的出現給小Q一個沉痛一擊。

 

 

 

於是這種方式是不可行的,但是還是想實現這個功能怎么辦呢!

不着急小編帶你訪問新大陸。

直接使用倆個inc方法來進行對多字段自增或者自減,那么小編這個思路也是簡單的看源碼來的。

 

 

 

又或者大家應該都在使用thinkphp框架時都在一個查詢中使用過倆個where方法吧!其實思路都一樣既然倆個where都可以實現查詢。

那么那倆個inc應該也會是可以實現多個字段進行自增或者自減的。

所以說小編最后的解決方案就是如上圖的解決方案。

二、翻騰一下源碼

在這個過程中小編還是去無聊的翻騰了一下關於inc的實現過程。

在下圖中主要看關於參數給予的解釋,可以看到第一個參數是可以為數組或者字符串的。

但是在根據代碼會發現,雖然支持多個字段自增或者自減但是步長卻是一個值。

所以說框架給提供的這個方法是可以同時自增或者自減多個字段,但是值只能是固定的。

 

 

 

如果想要實現多個字段多個步長就需要來修改源碼來解決這個問題。

 

 

 

以下是小編修改源碼后的內容,可以跟inc源碼那一幅圖做對比。

小編修改的源碼主要為圈到的地方,因為step這個值在源碼中是直接給定義為1了。

所以就需要修改這一塊,使用is_array來進行檢測這個變量是否為數組就可以了。

 

 

 

經過以上的操作就可以實現針對多個字段多個步長進行自增或者自減了。

小編這種直接修改源碼是不建議大家借鑒的,只是針對一個問題我們要學會去在源碼中找到解決方案。

所以說針對如何同時自增自減多個字段這個問題小編還是建議使用方案一的解決方法。

畢竟這種情況是屬於少數的,在框架基礎改着改着自己都會亂。

三、使用SQL語句進行實現

如果為了解決問題這一節的內容就不用在看了,看第一節就可以完美的解決你的問題了。

小編是喜歡琢磨一個問題使用多種方案進行解決。

那么接下來小編再使用SQL語句對這個問題進行深度的解析。

既然咱們都已經在第一節中將實現方案都已經實現了,在框架中有一個方法fetchSql(),可以直接打印出sql語句。

那么就來看一下這個sql語句是什么樣的。

1 UPDATE `table` SET `filed1` = `filed1` + 200 , `filed2` = `filed2` + 86 WHERE `time`
2 BETWEEN 1609689600 AND 1609775999


以上就是使用框架提供的方法打印出的SQL語句,表名和字段小編都做了更改,直接修改為自己需要自增或者自減的字段即可。

 

 

 

使用這個SQL語句是可以解決本文主題的,所以小編就沒有給出打印結果一系列的截圖,如果感興趣的可以去自己測試一下。

俗話說的好,光說不練假把式,還是需要自己進行多多練習的。

以上就是使用原生sql在框架中實現的同時自增自減多個字段並且多個步長。

四、總結

這個問題其實本質很簡單,框架也給提供了對應的方法,只需要直接調用就行了。

問題難在就是對框架給提供的自增或者自減的方法你知道幾個,框架給提供了inc和setInc這個倆種方式。

如果你只知道setInc那豈不是就吉吉思密達了,所以沒事還是多看看源碼和文檔,對你只有好處沒有壞處。

還有一個問題就是關於小編在文章中提到了使用新的方式來實現同時自增自減多個字段,這種方式在框架底層進行了修改。

這種實現方式不推薦使用,修改源碼只是為了測試,也是對自己閱讀源碼的能力進行提升,而不是在框架底層無所畏懼的進行修改。

 


免責聲明!

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



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