日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

網圖侵刪

場景描述

不知道各位小伙伴有沒有遇到過這樣的情況:MySQL表中有一個字段res_content 是一個由longtext類型(可以理解為一個更長的varchar)保存的巨大的JSON對象,但是,由于錄入的疏忽,導致這個json對象中的有一個屬性值錯誤,需要重新修改這個json對象的屬性值,于是,你就不得不將整個json對象,也就是res_content字段重新替換了一遍。=。= |||

一個json中小小的屬性需要更新,卻要替換整個json對象,僅僅因為它在數據庫中是以一個字段存儲的!!?這也太傻x了!

 

我是拒絕的

這樣做雖然簡單粗暴,但很明顯不符合我追求完美的性格,既然只有一個屬性出錯,那為什么不能直接替換這個JSON中具體的屬性呢?而且這樣的解決辦法,如果處理上千萬條JSON還可以減小mysql的性能開銷,豈不美哉!?

JSON_REPLACE(...)

官方描述

官方的第一句解釋是:Replaces existing values in a JSON document and returns the result。就沖這句話,基本可以鎖定它就是我要找的解決方案。我們來看一下官方的示例:

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

案例一

上面的例子很好理解,首先,它定義了一個JSON字符串變量,然后通過JSON_REPLACE函數將這個變量中的屬性a的值由1 改為了10,然后將屬性c的值改為了‘[true, false]’,但由于json字符串中并沒有屬性 c 因此只有屬性 a 修改成功了。(這里需要注意,mysql函數僅僅是做數據轉換,并不涉及到真正的增刪改查,因此還需要配合具體的UPDATE才能夠真正更新數據)

看過這個例子之后,我思考了一下我的應用場景,只需要在更新的sql語句中調用JSON_REPLACE函數,將json對象所對應的字段比作上面的JSON字符串變量,然后通過 ‘$xxx’ 匹配到我所希望修改的值,然后就可以成功修改JSON對象中的屬性了。

驗證測試

現在我有一張employee表,它的last_name字段是一個簡單的JSON字符串:

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

employee表

現在,我希望修改emp_id = 1的記錄,將這條記錄中last_name中的name改成“Harry”,gender改成 “”。于是我執行了下面的SQL:

UPDATE employee 
SET last_name = json_replace(last_name, '$.name', "Harry", "$.gender", "女") 
WHERE emp_id = 1;

這里注意,我特意將 "$.gender" 寫為雙引號,目的就是為了測試這樣的通配是否可以生效,執行成功后,查詢結果如下:

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

案例二

可以看到,last_name字段中的name屬性已經修改成Harry,gender也被修改成了“女”,因此通配符 用雙引、單引都是可以的。

除了JSON_REPLACE()函數,還有很多其他的json函數,如JSON_REMOVE()等,具體函數用法可以查看官方文檔。

里面還貼心的將用法進行了歸類:

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

mysql官方文檔

但是,這些函數應該都對mysql數據庫的版本比較敏感,一般對MySQL5.7以上的版本支持比較理想,個別函數可能需要5.7.8以上,我的數據庫是5.7.23,因此JSON_REPLACE()用著還可以,如果你的版本在5.7以下,就得好好看看是否支持這些函數了。

簡單查看MySQL數據庫的版本:SELECT VERSION();

數據庫JSON怎么改?一個SQL函數讓你的操作瞬間高大上

mysql版本號

綜上,就是關于如何修改JSON字符串中屬性值的函數JSON_REPLACE()的簡單介紹,歡迎文末留言。

分享到:
標簽:數據庫 JSON
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定