最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的json處理相關(guān)方法詳解

 更新時間:2025年10月21日 09:31:30   投稿:mrr  
在MySQL中,這些JSON函數(shù)用于處理JSON類型的數(shù)據(jù),方便對JSON數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)換和聚合等操作,本文給大家介紹MySQL的json處理相關(guān)方法,感興趣的朋友跟隨小編一起看看吧

起因:在使用tidb作為檢查點的存儲模塊時,想著tidb兼容mysql,于是借用的langgraph-checkpoint-mysql插件來實現(xiàn)tidb。但在驗證過程中發(fā)現(xiàn)并不如此,mysql很多處理json的語法tidb無法使用。下面介紹這些語法的功能,下一篇會介紹到底哪里不兼容。
json_table,json_unquote,json_extract,json_keys,json_arrayagg,json_array

在 MySQL 中,這些 JSON 函數(shù)用于處理 JSON 類型的數(shù)據(jù),方便對 JSON 數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)換和聚合等操作。

JSON_TABLE

作用:將 JSON 數(shù)據(jù)轉(zhuǎn)換為關(guān)系表的形式,使得可以像查詢普通表一樣查詢 JSON 數(shù)據(jù)中的元素,方便進(jìn)行復(fù)雜的查詢和分析。

案例:假設(shè)有一個 students 表,其中 courses 字段是 JSON 類型,存儲了學(xué)生所選課程及其成績。

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    courses JSON
);
INSERT INTO students (id, name, courses) VALUES
(1, 'Alice', '[{"course": "Math", "score": 90}, {"course": "English", "score": 85}]'),
(2, 'Bob', '[{"course": "Math", "score": 80}, {"course": "English", "score": 88}]');
-- 使用 JSON_TABLE 展開 courses 字段
SELECT 
    s.id,
    s.name,
    jt.course,
    jt.score
FROM 
    students s,
    JSON_TABLE(
        s.courses,
        '$[*]' COLUMNS (
            course VARCHAR(50) PATH '$.course',
            score INT PATH '$.score'
        )
    ) AS jt;

查詢結(jié)果:

idnamecoursescore
1AliceMath90
1AliceEnglish85
2BobMath80
2BobEnglish88
JSON_TABLE(
  json_data,  -- 輸入的 JSON 數(shù)據(jù)(可以是字段名、JSON 字符串或表達(dá)式)
  row_path_expression  -- 行路徑表達(dá)式,指定從 JSON 中提取“行”的范圍
  COLUMNS (
    -- 定義輸出表的列結(jié)構(gòu),每個列包含:列名、數(shù)據(jù)類型、JSON 路徑
    column1 data_type PATH 'json_path1',
    column2 data_type PATH 'json_path2',
    ...
  )
) AS table_alias  -- 為轉(zhuǎn)換后的表指定別名

row_path_expression:行路徑表達(dá)式

  • 用 JSON 路徑語法指定從 JSON 中哪些部分提取 “行”(每個匹配的元素會成為表中的一行)。
  • 常用語法:
    • $[*]:匹配 JSON 數(shù)組中的所有元素(每個元素作為一行)。
    • $.obj[*]:匹配 JSON 對象中 obj 字段對應(yīng)的數(shù)組的所有元素。
  • 示例:'$[*]'(解析 JSON 數(shù)組的所有元素為行)。

COLUMNS (...):定義輸出表的列結(jié)構(gòu)

用于指定轉(zhuǎn)換后的關(guān)系表包含哪些列,以及每個列的值從 JSON 中的哪個位置提取。每個列的定義格式為:列名 數(shù)據(jù)類型 PATH 'JSON路徑'

JSON_UNQUOTE 和JSON_EXTRACT

JSON_UNQUOTE

作用:移除 JSON 字符串中的引號,將 JSON 格式的字符串轉(zhuǎn)換為普通字符串。

案例:假設(shè)從 JSON 數(shù)據(jù)中提取出來的某個值是帶引號的字符串,想要得到不帶引號的內(nèi)容時使用。

JSON_EXTRACT

作用:從 JSON 數(shù)據(jù)中提取指定路徑的元素,可以是標(biāo)量值(如字符串、數(shù)字等),也可以是 JSON 對象或數(shù)組。

案例:繼續(xù)使用上述 students 表,查詢學(xué)生 Alice 的數(shù)學(xué)成績。

查詢結(jié)果:

name
John
  1. SET @json_str = '{"name": "John"}';
  • 定義一個名為 @json_str 的用戶變量,并賦值為 JSON 格式的字符串 {"name": "John"}
  • 這里的 JSON 字符串表示一個對象,包含一個鍵值對:"name" 對應(yīng)的值是 "John"(注意 JSON 中字符串必須用雙引號包裹)。
  1. SELECT JSON_UNQUOTE(JSON_EXTRACT(@json_str, '$.name')) AS name;

這是一個查詢語句,包含兩個嵌套的 JSON 函數(shù):

(1)JSON_EXTRACT(@json_str, '$.name')

  • 作用:從 JSON 數(shù)據(jù)中提取指定路徑的值。
  • @json_str 是要解析的 JSON 變量(即 {"name": "John"})。
  • '$.name' 是 JSON 路徑,表示 “根節(jié)點下的 name 字段”($ 代表根節(jié)點)。
  • 執(zhí)行結(jié)果:提取到的值是 "John"(帶雙引號的 JSON 字符串)。

(2)JSON_UNQUOTE(...)

  • 作用:移除 JSON 字符串外層的雙引號,將其轉(zhuǎn)換為普通字符串。
  • 接收 JSON_EXTRACT 的結(jié)果 "John" 作為參數(shù),移除引號后得到 John。

(3)AS name

  • 給查詢結(jié)果的列起一個別名 name,方便閱讀。

JSON_KEYS

作用:返回 JSON 對象中的所有鍵,以 JSON 數(shù)組的形式呈現(xiàn)。

案例:假設(shè)有一個存儲用戶信息的 JSON 數(shù)據(jù),獲取其中所有的鍵。

SET @user_info = '{"name": "Tom", "age": 25, "email": "tom@example.com"}';
SELECT JSON_KEYS(@user_info) AS keys;

查詢結(jié)果:

keys
[“name”, “age”, “email”]

JSON_ARRAYAGG

作用:將一組值聚合為一個 JSON 數(shù)組,常用于分組查詢中,將每組內(nèi)的相關(guān)數(shù)據(jù)聚合成 JSON 數(shù)組形式。

案例:統(tǒng)計每個學(xué)生所選課程的名稱,以 JSON 數(shù)組形式呈現(xiàn)。

SELECT 
    name,
    JSON_ARRAYAGG(course) AS courses
FROM 
    students s,
    JSON_TABLE(
        s.courses,
        '$[*]' COLUMNS (
            course VARCHAR(50) PATH '$.course'
        )
    ) AS jt
GROUP BY 
    name;

查詢結(jié)果:

namecourses
Alice[“Math”, “English”]
Bob[“Math”, “English”]

JSON_ARRAY

作用:將一組值創(chuàng)建為一個 JSON 數(shù)組,它與 JSON_ARRAYAGG 的區(qū)別在于,JSON_ARRAY 不是聚合函數(shù),是直接創(chuàng)建數(shù)組。

案例:創(chuàng)建一個包含多個字符串的 JSON 數(shù)組。

SELECT JSON_ARRAY('red', 'green', 'blue') AS colors;

查詢結(jié)果:

colors
[“red”, “green”, “blue”]

到此這篇關(guān)于MySQL中的json處理相關(guān)方法詳解的文章就介紹到這了,更多相關(guān)mysql json處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql截取的字符串函數(shù)substring_index的用法

    mysql截取的字符串函數(shù)substring_index的用法

    這篇文章主要介紹了mysql截取的字符串函數(shù)substring_index的用法,需要的朋友可以參考下
    2014-08-08
  • Mysql自增主鍵id不是以此逐級遞增的處理

    Mysql自增主鍵id不是以此逐級遞增的處理

    這篇文章主要介紹了Mysql自增主鍵id不是以此逐級遞增的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MySQL主鍵與外鍵設(shè)計原則 + 實戰(zhàn)案例解析

    MySQL主鍵與外鍵設(shè)計原則 + 實戰(zhàn)案例解析

    這篇文章詳細(xì)介紹了MySQL中的主鍵和外鍵,包括它們的基本概念、設(shè)計原則、應(yīng)用場景以及實戰(zhàn)案例,主鍵用于唯一標(biāo)識表中的每一行記錄,而外鍵用于建立和加強表之間的關(guān)聯(lián)關(guān)系,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • navicat創(chuàng)建MySql定時任務(wù)的方法詳解

    navicat創(chuàng)建MySql定時任務(wù)的方法詳解

    這篇文章主要介紹了navicat創(chuàng)建MySql定時任務(wù)的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • MySQL數(shù)據(jù)庫如何正確設(shè)置主鍵

    MySQL數(shù)據(jù)庫如何正確設(shè)置主鍵

    主鍵是用于唯一標(biāo)識數(shù)據(jù)庫表中每一行數(shù)據(jù)的一列或一組列,主鍵可以確保數(shù)據(jù)的唯一性和完整性,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫如何正確設(shè)置主鍵的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 關(guān)于mysql innodb count(*)速度慢的解決辦法

    關(guān)于mysql innodb count(*)速度慢的解決辦法

    innodb引擎在統(tǒng)計方面和myisam是不同的,Myisam內(nèi)置了一個計數(shù)器,所以在使用 select count(*) from table 的時候,直接可以從計數(shù)器中取出數(shù)據(jù)。而innodb必須全表掃描一次方能得到總的數(shù)量
    2012-12-12
  • MySQL8.0安裝中遇到的3個小錯誤總結(jié)

    MySQL8.0安裝中遇到的3個小錯誤總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于MySQL8.0安裝中遇到的3個小錯誤的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql8.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Mysql主從同步如何重置

    Mysql主從同步如何重置

    在MySQL數(shù)據(jù)庫運維中,遇到主從數(shù)據(jù)庫數(shù)據(jù)不一致時需要進(jìn)行同步重置,本文介紹了主從同步重置的具體步驟:首先對從庫操作,包括停止slave、重置從庫;其次對主庫進(jìn)行操作,包括重置主庫同步設(shè)置、鎖定主庫;最后從庫導(dǎo)入主庫數(shù)據(jù)
    2024-10-10
  • MySQL觸發(fā)器使用詳解

    MySQL觸發(fā)器使用詳解

    本文主要詳細(xì)介紹了mysql數(shù)據(jù)庫的觸發(fā)器的相關(guān)知識,非常的全面,有需要的小伙伴參考下吧。
    2015-01-01
  • Mysql查詢優(yōu)化的一些實用方法總結(jié)

    Mysql查詢優(yōu)化的一些實用方法總結(jié)

    對于MySQL查詢語句來說,效率是最重要的,下面這篇文章主要給大家介紹了關(guān)于Mysql查詢優(yōu)化的一些實用方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評論

东海县| 石河子市| 深泽县| 浦北县| 阜宁县| 盘山县| 青州市| 葫芦岛市| 安图县| 马公市| 门源| 玉田县| 武隆县| 金寨县| 峨边| 安岳县| 商城县| 故城县| 庆阳市| 沁源县| 达州市| 德清县| 富平县| 石台县| 双柏县| 铁力市| 美姑县| 兴和县| 鄢陵县| 凤翔县| 根河市| 铅山县| 旺苍县| 肃南| 双辽市| 都匀市| 家居| 克东县| 贵溪市| 湖南省| 金川县|