目錄
準備工作
JSON物件基礎操作
更多操作
首頁 資料庫 mysql教程 MySQL之JSON類型欄位如何使用

MySQL之JSON類型欄位如何使用

Apr 17, 2023 pm 06:52 PM
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'
FROM
	json_demo 
WHERE
	id > 2;
登入後複製

MySQL之JSON類型欄位如何使用

TIPS:

  • ->和->>是MySQL設計的語法,其中->在MySQL5.7支持,->>在MySQL8.0中支持。

  • ->等效於JSON_EXTRACT(),當查詢欄位為字串時,其傳回值也會帶有""。

  • ->>等效於JSON_UNQUOTE(JSON_EXTRACT()),當查詢欄位為字串時,其傳回值不會帶有""。

用於條件查詢

content -> '$.key'可以看成一個字段,一個字段能做的操作基本他都能。

SELECT
	id,
	content -> '$.key' AS 'key',
	content ->> '$.value' AS 'value3'
FROM
	json_demo 
WHERE
	id > 2
	AND content -> '$.key' > 1
	AND content -> '$.value' like '%2%';
登入後複製

MySQL之JSON類型欄位如何使用

修改指定欄位值

/* 修改 */
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;
登入後複製

MySQL之JSON類型欄位如何使用

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;
登入後複製

MySQL之JSON類型欄位如何使用

#JSON陣列操作

查詢指定欄位值

SELECT
	id,
	content -> '$[*].key' AS 'key',
	content ->> '$[*].value' AS 'value',
	content -> '$[0].key' AS 'key2',
	content ->> '$[0].value' AS 'value2',
	/* 查询数组长度 */
	JSON_LENGTH(content) AS 'length'
FROM
	json_demo 
WHERE
	id < 3;
登入後複製

MySQL之JSON類型欄位如何使用

用於條件查詢

SELECT
	id,
	content -> &#39;$[*].key&#39; AS &#39;key&#39;,
	content ->> &#39;$[*].value&#39; AS &#39;value&#39;
FROM
	json_demo 
WHERE
	id < 3
	/* content.value的值中存在like&#39;%34%&#39;的值 */
	AND content ->> &#39;$[*].value&#39; like &#39;%34%&#39;
	/* content.key的值中有4 */
	AND JSON_OVERLAPS(content ->> &#39;$[*].key&#39;, &#39;4&#39; );
登入後複製

MySQL之JSON類型欄位如何使用

MySQL之JSON類型欄位如何使用

MySQL之JSON類型欄位如何使用

#################修改指定欄位值#########基礎運算都跟JSON物件差不太多,就是在'$'後面加對應的索引位'$[0]',指定所有則'$[*] '。如果數組包含數組,可以透過'$[1][2][3]'這種方式指定深層的數組元素。 ##################追加元素#########JSON_ARRAY_APPEND和JSON_ARRAY_INSERT都可以實作陣列元素追加。差別在於JSON_ARRAY_APPEND可以不指定索引位,此時往最後位置追加;JSON_ARRAY_INSERT必須指定索引位,不指定則會報錯。 ######JSON_ARRAY_APPEND是追加在指定索引位後面,而JSON_ARRAY_INSERT則是插入到指定索引位前面。 ############

更多操作

##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_SCHEMA_VALID() (8.0.17引入)JSON_SCHEMA_VALIDATION_REPORT() (8.0.17引入)JSON_SEARCH()JSON_SET()JSON_STORAGE_FREE()#JSON_STORAGE_SIZE()JSON_TABLE()JSON_TYPE()JSON_UNQUOTE()JSON_VALID()JSON_VALUE()(8.0.21導入)MEMBER OF() (8.0.17引入)
名稱 描述
JSON_ARRAY() 建立JSON陣列
JSON_ARRAY_APPEND() 將資料附加到JSON文件
JSON_ARRAY_INSERT( ) 插入JSON陣列
JSON_CONTAINS() JSON文件是否在路徑中包含特定物件
JSON_CONTAINS_PATH() JSON文件是否在路徑中包含任何資料
替換JSON文檔中的值
根據JSON模式驗證JSON文檔;如果文檔針對架構進行了驗證,則返回TRUE / 1;否則,則返回FALSE / 0。
根據JSON模式驗證JSON文件;以JSON格式傳回有關驗證結果的報告,包括成功或失敗以及失敗原因
JSON文件中值的路徑
#將資料插入JSON文檔
部分更新後,JSON列值的二進位表示形式中的可用空間
用於儲存JSON文件的二進位表示形式的空間
#從JSON表達式傳回資料作為關係表
JSON值類型
#取消引用JSON值
JSON值是否有效
在提供的路徑所指向的位置從JSON文件中提取值;以VARCHAR(512)或指定的類型傳回此值
如果第一個操作數與作為第二個操作數傳遞的JSON數組的任何元素匹配,則返回true(1),否則返回false(0)

以上是MySQL之JSON類型欄位如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

centos7如何安裝mysql centos7如何安裝mysql Apr 14, 2025 pm 08:30 PM

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

centos安裝mysql centos安裝mysql Apr 14, 2025 pm 08:09 PM

在 CentOS 上安裝 MySQL 涉及以下步驟:添加合適的 MySQL yum 源。執行 yum install mysql-server 命令以安裝 MySQL 服務器。使用 mysql_secure_installation 命令進行安全設置,例如設置 root 用戶密碼。根據需要自定義 MySQL 配置文件。調整 MySQL 參數和優化數據庫以提升性能。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

See all articles