首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.7 JSON 類型與函數實戰:創建、查詢、索引、更新全覆蓋

     編輯:MySQL 資料庫相關知識

建表與插入

CREATE TABLE article (
  id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  title VARCHAR(200) NOT NULL,
  tags JSON DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

INSERT INTO article (title, tags) VALUES ('體驗 MySQL JSON', '["MySQL", "Database"]');

核心查詢函數

函數用途示例
JSON_CONTAINS判斷文檔是否包含指定值WHERE JSON_CONTAINS(tags, '["MySQL"]')
JSON_SEARCH按模式查找路徑,返回路徑或 NULLWHERE JSON_SEARCH(tags, 'one', 'Data%') IS NOT NULL
JSON_EXTRACT按 JSON Path 提取值JSON_EXTRACT(doc, '$.name')
->>簡寫提取並去引號tags->>'$[0]'

JSON Path 語法

$.key           -- 頂層鍵
$.arr[0]        -- 數組第 1 元素
$.obj.key       -- 嵌套對象
$**.key         -- 遞歸搜索所有層級的 key

更新函數

函數行為
JSON_SET路徑存在則替換,不存在則插入(upsert)
JSON_INSERT僅插入,路徑存在則忽略
JSON_REPLACE僅替換,路徑不存在則忽略
JSON_MERGE合併數組/對象(5.7.22+ 建議用 JSON_MERGE_PATCH/PRESERVE)
JSON_ARRAY_APPEND數組尾部追加
JSON_REMOVE刪除指定路徑

實戰更新示例

-- 給含 MySQL 標簽且無 dev 的文章加 dev
UPDATE article SET tags = JSON_MERGE(tags, '["dev"]')
WHERE JSON_SEARCH(tags, 'one', 'dev') IS NULL
  AND JSON_SEARCH(tags, 'one', 'MySQL') IS NOT NULL;

-- 將第一個標簽改為 "MySQL 5.7.13"
UPDATE article SET tags = JSON_SET(tags, '$[0]', 'MySQL 5.7.13');

總結

MySQL 5.7 原生 JSON 類型提供完整的文檔式操作能力:JSON_CONTAINS/SEARCH/EXTRACT 查詢,SET/INSERT/REPLACE/MERGE/REMOVE 更新,配合 JSON Path 靈活定位,適合半結構化數據場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved