共計 4292 個字符,預計需要花費 11 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 MySQL 之 JSON 類型字段怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
測試環境:MySQL8.0.19
準備工作
CREATE TABLE json_demo (
`id` INT ( 11 ) NOT NULL PRIMARY KEY,
`content` json NOT NULL
INSERT INTO json_demo ( id, content )
VALUES
/* 這條是數組 */
( 1, [{ key : 1, order : 1, value : 34252},{key : 2, order : 2, value : 23423}] ),
/* 這條是數組 */
( 2, [{ key : 4, order : 4, value : 234},{key : 5, order : 5, value : 234324523}] ),
/* 這條是對象 */
( 3, { key : 3, order : 3, value : 43242} ),
/* 這條是對象 */
( 4, { key : 6, order : 6, value : 5423} );
JSON 對象基礎操作
查詢指定字段值
/* 基礎查詢 */
SELECT
content - $.key AS key ,
JSON_EXTRACT(content, $.key) AS key2 ,
content - $.value AS value ,
JSON_EXTRACT(content, $.value) AS value2 ,
content - $.value AS value3 ,
JSON_UNQUOTE(JSON_EXTRACT(content, $.value)) AS value4
json_demo
WHERE
id 2;
TIPS:
– 和 - 是 MySQL 設計的語法,其中 - 在 MySQL5.7 支持,- 在 MySQL8.0 中支持。
– 等效于 JSON_EXTRACT(),當查詢字段為字符串時,其返回值還會帶有。
– 等效于 JSON_UNQUOTE(JSON_EXTRACT()),當查詢字段為字符串時,其返回值不會帶有。
用于條件查詢
content – $.key 可以看成一個字段,一個字段能做的操作基本他都能。
SELECT
content - $.key AS key ,
content - $.value AS value3
json_demo
WHERE
id 2
AND content - $.key 1
AND content - $.value like %2%
修改指定字段值
/* 修改 */
UPDATE json_demo
SET content = JSON_REPLACE(
content,
/* 將 content.key 值 + 1 */
$.key , content - $.key + 1,
/* 將 content.value 值后拼接 abc */
$.value , concat(content - $.value , abc)
) WHERE id = 3;
/* JSON_SET 也可以 */
UPDATE json_demo
SET content = JSON_SET(
content,
/* 將 content.key 值 + 1 */
$.key , content - $.key + 1,
/* 將 content.value 值后拼接 abc */
$.value , concat(content - $.value , abc)
) WHERE id = 3;
/* 查詢修改結果 */
SELECT id,content,content - $.key AS key ,content - $.value AS value3
FROM json_demo WHERE id = 3;
/* 重新賦值 */
UPDATE json_demo SET
content = JSON_REPLACE(content, $.key ,3, $.value , 43242) WHERE id = 3;
TIPS:
JSON_REPLACE 和 JSON_SET 都可以用來修改某個字段值,區別在于 JSON_REPLACE 替換不存在的屬性時操作無效;而 JSON_SET 則會將這個不存在的屬性插入進去。
所以 JSON_SET 也可以用來追加屬性,與 JSON_INSERT 類似。區別在于 JSON_INSERT 如果插入一個已存在的屬性時操作會失效,而 JSON_SET 會替換。
追加元素
UPDATE json_demo
SET content = JSON_INSERT(content, $.key , 234)
WHERE id = 3;
SELECT id,content,content - $.key AS key FROM json_demo WHERE id = 3;
UPDATE json_demo
SET content = JSON_INSERT(content, $.temp , 234)
WHERE id = 3;
SELECT id,content,content - $.key AS key FROM json_demo WHERE id = 3;
UPDATE json_demo
SET content = JSON_SET(content, $.temp2 , 432)
WHERE id = 3;
SELECT id,content,content - $.key AS key FROM json_demo WHERE id = 3;
JSON 數組操作
查詢指定字段值
SELECT
content - $[*].key AS key ,
content - $[*].value AS value ,
content - $[0].key AS key2 ,
content - $[0].value AS value2 ,
/* 查詢數組長度 */
JSON_LENGTH(content) AS length
json_demo
WHERE
id 3;
用于條件查詢
SELECT
content - $[*].key AS key ,
content - $[*].value AS value
json_demo
WHERE
id 3
/* content.value 的值中存在 like %34% 的值 */
AND content - $[*].value like %34%
/* content.key 的值中有 4 */
AND JSON_OVERLAPS(content - $[*].key , 4 );
修改指定字段值
基礎操作都跟 JSON 對象差不太多,就是在 $ 后面加對應的索引位 $[0],指定所有則 $[*]。如果數組中包含數組,可以通過 $[1][2][3] 這種方式指定深層的數組元素。
追加元素
JSON_ARRAY_APPEND 和 JSON_ARRAY_INSERT 都可以實現數組元素追加。區別在于 JSON_ARRAY_APPEND 可以不指定索引位,此時往最后位置追加;JSON_ARRAY_INSERT 必須指定索引位,不指定則會報錯。
JSON_ARRAY_APPEND 是追加在指定索引位后面,而 JSON_ARRAY_INSERT 則是插入到指定索引位前面。
更多操作名稱描述 JSON_ARRAY() 創建 JSON 數組 JSON_ARRAY_APPEND() 將數據附加到 JSON 文檔 JSON_ARRAY_INSERT() 插入 JSON 數組 JSON_CONTAINS()JSON 文檔是否在路徑中包含特定對象 JSON_CONTAINS_PATH()JSON 文檔是否在路徑中包含任何數據 JSON_DEPTH()JSON 文檔的最大深度 JSON_EXTRACT() 從 JSON 文檔返回數據 JSON_INSERT() 將數據插入 JSON 文檔 JSON_KEYS()JSON 文檔中的鍵數組 JSON_LENGTH()JSON 文檔中的元素數 JSON_MERGE()(已棄用)合并 JSON 文檔,保留重復的鍵。JSON_MERGE_PRESERVE()的已棄用同義詞 JSON_MERGE_PATCH() 合并 JSON 文檔,替換重復鍵的值 JSON_MERGE_PRESERVE() 合并 JSON 文檔,保留重復的鍵 JSON_OBJECT() 創建 JSON 對象 JSON_OVERLAPS()(8.0.17 引入)比較兩個 JSON 文檔,如果它們具有共同的任何鍵值對或數組元素,則返回 TRUE(1),否則返回 FALSE(0)JSON_PRETTY() 以易于閱讀的格式打印 JSON 文檔 JSON_QUOTE() 引用 JSON 文檔 JSON_REMOVE() 從 JSON 文檔中刪除數據 JSON_REPLACE() 替換 JSON 文檔中的值 JSON_SCHEMA_VALID()(8.0.17 引入)根據 JSON 模式驗證 JSON 文檔;如果文檔針對架構進行了驗證,則返回 TRUE / 1;否則,則返回 FALSE / 0。JSON_SCHEMA_VALIDATION_REPORT()(8.0.17 引入)根據 JSON 模式驗證 JSON 文檔;以 JSON 格式返回有關驗證結果的報告,包括成功或失敗以及失敗原因 JSON_SEARCH()JSON 文檔中值的路徑 JSON_SET() 將數據插入 JSON 文檔 JSON_STORAGE_FREE() 部分更新后,JSON 列值的二進制表示形式中的可用空間 JSON_STORAGE_SIZE() 用于存儲 JSON 文檔的二進制表示形式的空間 JSON_TABLE() 從 JSON 表達式返回數據作為關系表 JSON_TYPE()JSON 值類型 JSON_UNQUOTE() 取消引用 JSON 值 JSON_VALID()JSON 值是否有效 JSON_VALUE()(8.0.21 引入)在提供的路徑所指向的位置從 JSON 文檔中提取值;以 VARCHAR(512)或指定的類型返回此值 MEMBER OF()(8.0.17 引入)如果第一個操作數與作為第二個操作數傳遞的 JSON 數組的任何元素匹配,則返回 true(1),否則返回 false(0)
以上就是“MySQL 之 JSON 類型字段怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。
向 AI 問一下細節丸趣 TV 網 – 提供最優質的資源集合!