深入了解 MySQL 中的 JSON_CONTAINS

深入了解 MySQL 中的 JSON_CONTAINS

MySQL 5.7 及更高版本引入了對 JSON 數據類型的支持,使得在數據庫中存儲和查詢 JSON 數據成為可能。在這些新功能中,JSON_CONTAINS 函數是一個非常有用的工具,允許我們檢查一個 JSON 文檔是否包含特定的值或對象。本文將深入探討 JSON_CONTAINS 的用法、語法、示例及其應用場景。

1. JSON_CONTAINS 函數的概述

JSON_CONTAINS 函數用于檢查一個 JSON 文檔中是否包含另一個 JSON 文檔。它的語法如下:

JSON_CONTAINS(target, candidate[, path])
  • target: 目標 JSON 文檔,即我們要檢查的文檔。
  • candidate: 候選 JSON 文檔,即我們要查找的值或對象。
  • path: 可選參數,指定一個 JSON 路徑,用于查找特定的節點。

2. 基本用法

2.1 檢查簡單值

假設我們有一個存儲用戶信息的表 users,其中有一個 JSON 列 preferences,結構如下:

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),preferences JSON
);

插入一些示例數據:

INSERT INTO users (name, preferences) VALUES 
('Alice', '{"theme": "dark", "notifications": true}'),
('Bob', '{"theme": "light", "notifications": false}'),
('Charlie', '{"theme": "dark"}');

我們可以使用 JSON_CONTAINS 來檢查哪些用戶的偏好設置中包含某個特定值。例如,查找所有偏好設置中包含 “dark” 主題的用戶:

SELECT name
FROM users
WHERE JSON_CONTAINS(preferences, '"dark"', '$.theme');

在這個查詢中,我們檢查 preferences 中的 theme 字段是否包含值 "dark"

2.2 檢查嵌套對象

如果 JSON 文檔中包含嵌套結構,JSON_CONTAINS 仍然可以有效地使用。假設我們更新 preferences 列,添加更多復雜的結構:

UPDATE users SET preferences = '{"ui": {"theme": "dark", "font": "Arial"}, "notifications": true} WHERE name = "Alice";

我們現在想檢查 Alice 的偏好設置是否包含 {"theme": "dark"} 這個對象:

SELECT name
FROM users
WHERE JSON_CONTAINS(preferences, '{"theme": "dark"}', '$.ui');

3. 實際應用場景

3.1 過濾用戶數據

在實際應用中,JSON_CONTAINS 可以用于根據用戶的偏好設置來過濾用戶。例如,顯示所有啟用了通知的用戶:

SELECT name
FROM users
WHERE JSON_CONTAINS(preferences, 'true', '$.notifications');
3.2 多條件查詢

如果我們想要查找所有既使用 “dark” 主題又啟用了通知的用戶,可以結合使用 JSON_CONTAINSAND 條件:

SELECT name
FROM users
WHERE JSON_CONTAINS(preferences, '"dark"', '$.ui.theme')
AND JSON_CONTAINS(preferences, 'true', '$.notifications');
3.3 與其他 JSON 函數結合使用

JSON_CONTAINS 還可以與其他 JSON 函數結合使用,例如 JSON_ARRAY, JSON_OBJECT 等,來創建更復雜的查詢。例如,我們可以檢查用戶偏好設置中的多個主題:

SELECT name
FROM users
WHERE JSON_CONTAINS(preferences, '["dark", "light"]', '$.ui.theme');

4. 性能考慮

使用 JSON 數據類型和函數時,性能是一個需要考慮的關鍵因素。雖然 JSON 為靈活的數據存儲提供了優勢,但過多的嵌套和復雜結構可能會導致查詢性能下降。因此,在設計 JSON 數據結構時,應考慮到可能的查詢方式和數據訪問模式。

5. 總結

JSON_CONTAINS 是 MySQL 提供的一個強大工具,可以在 JSON 數據中快速查找和匹配特定的值或對象。通過靈活地使用這項功能,可以極大地增強應用程序的數據處理能力和靈活性。隨著應用場景的不斷擴展,理解和利用 MySQL 中的 JSON 功能將變得愈發重要。

希望本文能幫助你更好地理解和應用 MySQL 中的 JSON_CONTAINS 函數!
參考官方文檔:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72254.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git命令學習記錄

1. git reset 參數說明 git reset 是用來回退版本的,它可以添加三個參數,常用的使用格式是這樣的:git reset [--hard | --soft | --mixed] 版本號 一般使用git修改文件并提交需要三步,第一步在文本編輯器中編輯文件,也…

使用DeepSeek+KIMI生成高質量PPT

一、使用DeepSeek DeepSeek官網:DeepSeek 點擊“開始對話”,進入交互頁面。 在上圖中,輸入問題,即可獲取AI生成的結果。 基礎模型(V3):通用模型(2024.12),高…

深度學習工程師的技術圖譜和學習路徑

在構建一個深度學習工程師的技術圖譜時,按照“技能樹與能力模型”的結構可以幫助清晰地展示出技術體系的層次化關系,幫助學習者更好地理解每個技術點的依賴與順序。 深度學習工程師的技術圖譜和學習路徑 以下是深度學習工程師的技能樹,包括從基礎到進階的學習路徑,以及對…

RabbitMQ系列(五)基本概念之Queue

在 RabbitMQ 中,Queue(隊列) 是存儲消息的容器,也是消息傳遞的核心載體。以下是其核心特性與作用的全方位解析: 一、Queue 的定義與核心作用 消息存儲容器 Queue 是 RabbitMQ 中實際存儲消息的實體,生產者…

MySQL—使用binlog日志恢復數據

一、binlog日志恢復數據簡介 在 MySQL 中,使用二進制日志(binlog)恢復數據是一種常見的用于故障恢復或數據找回的方法。以下是詳細的使用步驟: 確認 binlog 已啟用:首先需要確認 MySQL 服務器已經啟用了二進制日志功…

VADv2: 基于矢量表征和概率規劃的E2E架構

1. 寫在前面 今天分享一篇自動駕駛領域的論文VADv2(End-to-End Vectorized Autonomous Driving via Probabilistic Planning), 基于矢量表征和概率規劃的E2E架構,2024年2月份華中科技大和地平線合作的一篇文章, 在經典的端到端模型架構上作出了基于概率規劃去輸出規劃軌跡的…

NLP11-命名實體識別(NER)概述

目錄 一、序列標注任務 常見子任務 二、 命名實體識別(NER) (一)簡介 (二)目標 (三)應用場景 (四)基本方法 (五)工具與資源 一…

虛擬仿真無線路由器5G和2.4G發射信號輻射對比(虛擬仿真得出最小安全距離,與國際標準要求一致)

1、前言 有人說,只要有電磁波的地方就有輻射。5G和2.4G信號輻射強度是多少?是否會對人體構成危害?無線路由器的2.4GHz頻段,頻率范圍:2.4 GHz 至 2.4835 GHz,信道寬度:通常為20 MHz,…

深入剖析 OpenCV:全面掌握基礎操作、圖像處理算法與特征匹配

深入剖析 OpenCV:全面掌握基礎操作、圖像處理算法與特征匹配 一、引言二、OpenCV 的安裝(一)使用 pip 安裝(二)使用 Anaconda 安裝 三、OpenCV 基礎操作(一)圖像的讀取、顯示與保存(…

DOM HTML:深入理解與高效運用

DOM HTML:深入理解與高效運用 引言 隨著互聯網的飛速發展,前端技術逐漸成為軟件開發中的關鍵部分。DOM(文檔對象模型)和HTML(超文本標記語言)是前端開發中的基石。本文將深入探討DOM和HTML的概念、特性以及在實際開發中的應用,幫助讀者更好地理解和使用這兩項技術。 …

【數據挖掘】Matplotlib

Matplotlib 是 Python 最常用的 數據可視化 庫之一,在數據挖掘過程中,主要用于 數據探索 (EDA)、趨勢分析、模式識別 和 結果展示。 📌 1. Matplotlib 基礎 1.1 安裝 & 導入 # 如果未安裝 Matplotlib,請先安裝 # pip instal…

DHCP配置實驗

實驗拓撲圖 首先配置server的IP地址和網關 接下來配置R1 undo info-center enable dhcp enable //開啟DHCP服務 ip pool dhcp-pool1 //開始配置dhcp地址池 gateway-list 192.168.1.254 //配置網關 network 192.168.1.0 mask 255.255.255.0 //配置網段和子網掩碼 dns-list …

Linux:ELF文件-靜動態庫原理

??所屬專欄:Linux?? ??作者主頁:嶔某?? ELF文件 什么是編譯?編譯就是將程序源代碼編譯成能讓CPU直接執行的機器代碼 如果我們要編譯一個 .c文件,使用gcc -c將.c文件編譯為二進制文件.o ,如果一個項目有多個.…

C++性能優化常用技巧

一. 選擇合適的數據結構 1.1 map與unordered_map的選擇 如果僅僅只需要使用到快速查找的特性,那么unordered_map更加合適,他的復雜度是O(1)。如果還需要排序以及范圍查找的能力,那么就選擇map。 1.2 vector與list的選擇 通常情況下&#…

Towards Graph Foundation Models: A Survey and Beyond

Towards Graph Foundation Models: A Survey and Beyond WWW24 ?#paper/???#? #paper/💡#? 背景和動機 背景與意義 隨著基礎模型(如大語言模型)在NLP等領域的突破,圖機器學習正經歷從淺層方法向深度學習的范式轉變。GFM…

基于 Python 深度學習的電影評論情感分析可視化系統(2.0 全新升級)

基于 Python 深度學習的電影評論情感分析可視化系統,基于 Flask 深度學習,構建了一個 影評情感分析系統,能夠 自動分析影評、計算情感趨勢 并 可視化展示,對于電影行業具有重要參考價值! 基于 Python 深度學習的電影評…

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系統上通過pip 安裝jupyter的時候遇到這個報錯,Cargo, the Rust package manager, is not installed or is not on PATH.。 解決辦法 官網:https://rustup.rs/# 下載:https://win.rustup.rs/x86_64 安裝完成之后&#xff0c…

CSS—text文本、font字體、列表list、表格table、表單input、下拉菜單select

目錄 1.文本 2.字體 3.列表list a.無序列表 b.有序列表 c.定義列表 4.表格table a.內容 b.合并單元格 3.表單input a.input標簽 b.單選框 c.上傳文件 4.下拉菜單 1.文本 屬性描述color設置文本顏色。direction指定文本的方向 / 書寫方向。letter-spacing設置字符…

開啟AI短劇新紀元!SkyReels-V1/A1雙劍合璧!昆侖萬維開源首個面向AI短劇的視頻生成模型

論文鏈接:https://arxiv.org/abs/2502.10841 項目鏈接:https://skyworkai.github.io/skyreels-a1.github.io/ Demo鏈接:https://www.skyreels.ai/ 開源地址:https://github.com/SkyworkAI/SkyReels-A1 https://github.com/Skywork…

數學建模:MATLAB極限學習機解決回歸問題

一、簡述 極限學習機是一種用于訓練單隱層前饋神經網絡的算法,由輸入層、隱藏層、輸出層組成。 基本原理: 輸入層接受傳入的樣本數據。 在訓練過程中隨機生成從輸入層到隱藏層的所有連接權重以及每個隱藏層神經元的偏置值,這些參數在整個…