国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

詳解Mysql中的JSON系列操作函數(shù)

2024-07-24 13:10:09
字體:
供稿:網(wǎng)友

前言

JSON是一種輕量級的數(shù)據(jù)交換格式,采用了獨立于語言的文本格式,類似XML,但是比XML簡單,易讀并且易編寫。對機器來說易于解析和生成,并且會減少網(wǎng)絡(luò)帶寬的傳輸。

JSON的格式非常簡單:名稱/鍵值。之前MySQL版本里面要實現(xiàn)這樣的存儲,要么用VARCHAR要么用TEXT大文本。 MySQL5.7發(fā)布后,專門設(shè)計了JSON數(shù)據(jù)類型以及關(guān)于這種類型的檢索以及其他函數(shù)解析。

下面一起來實際操作一下。

創(chuàng)建帶有 JSON 字段的表

比如一個‘文章'表,字段包括

id、標題 title、標簽 tags

一篇文章會有多個標簽,tags 就可以設(shè)為 JSON 類型

建表語句如下:

CREATE TABLE `article` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(200) NOT NULL, `tags` json DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB;

插入數(shù)據(jù)

插入一條帶有 JSON 內(nèi)容的數(shù)據(jù),執(zhí)行 insert 語句:

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

這里插入的是一個 JOSN 數(shù)組 [“Mysql”, “Database”]

查詢 article 表中的所有內(nèi)容,可以看到新插入的這條數(shù)據(jù)

mysql,json,函數(shù),5.7,操作

查詢

使用 JSON 函數(shù)做兩個簡單的查詢

1.查找?guī)в袠撕?rdquo;Mysql”的所有文章

SELECT * FROM `article`WHERE JSON_CONTAINS(tags, '["Mysql"]');

2.查找標簽中以”Data”開頭的文章

SELECT * FROM `article`WHERE JSON_SEARCH(tags, 'one', 'Data%') IS NOT NULL;

JSON_SEARCH 函數(shù)中3個參數(shù)的含義:

1.要查找的文檔

2.查找的范圍,有兩個選項,'one' 查找第一個符合條件的,'all'查找所有符合條件的

3.查找的條件

JSON Path

JSON Path用來定位文檔中的目標字段,例如

SELECT JSON_EXTRACT('{"id": 1, "name": "mysql"}','$.name');

結(jié)果為:mysql

JSON_EXTRACT() 是JSON提取函數(shù),$.name 就是一個 JSON path,表示定位文檔的 name 字段

JSON path 是以 $ 開頭,下面看幾個更多的示例

{"num": 123,"arr": [1, 2],"obj": {"a": 3,"b": 4}}$.num //結(jié)果:123$.arr //結(jié)果:[1, 2]$.arr[1] //結(jié)果:1$.obj.a //結(jié)果:3$**.b //結(jié)果:4

使用 JSON path 的查詢示例

SELECTtags->"$[0]" as 'tag'FROM `article`;

更新數(shù)據(jù)

例如想給文章添加一個 “dev” tag,更新的條件是已經(jīng)包含 “Mysql” 標簽,并且還沒有 “dev” 標簽的數(shù)據(jù)

更新語句如下:

UPDATE `article`SET tags = JSON_MERGE(tags, '["dev"]')WHEREJSON_SEARCH(tags, 'one', 'dev') IS NULLANDJSON_SEARCH(tags, 'one', 'Mysql') IS NOT NULL;

mysql,json,函數(shù),5.7,操作

可以看到成功添加了 “dev” 標簽

再比如想把 “Mysql” 這個標簽更新為 “Mysql 5.7.13″,更新語句如下:

UPDATE `article` set tags = JSON_SET(tags, ‘$[0]', ‘Mysql 5.7.13') ;

上面體驗了 JSON_MERGE JSON_SET,用于修改JSON的函數(shù)還有很多,例如:

JSON_INSERT(doc, path, val[, path, val]…)

插入數(shù)據(jù)

JSON_REPLACE(doc, path, val[, path, val]…)

替換數(shù)據(jù)

JSON_ARRAY_APPEND(doc, path, val[, path, val]…)

向數(shù)組尾部追加數(shù)據(jù)

JSON_REMOVE(doc, path[, path]…)

從指定位置移除數(shù)據(jù)

通過初步的操作體驗,感覺 Mysql 的 JSON 操作還是比較順暢的,以后可以在mysql中使用文檔結(jié)構(gòu)確實很方便

新版的 Mysql 還提供了 Javascript 的控制臺,類似 MongoDB 的 shell,也很方便,后面會總結(jié)出來。希望本文給大家在學習mysql的時候有所幫助,謝謝對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吕梁市| 宜州市| 赤城县| 东宁县| 正定县| 唐海县| 天峨县| 大城县| 广宁县| 长沙县| 高唐县| 仁布县| 朝阳县| 颍上县| 柞水县| 盐城市| 上饶市| 厦门市| 兰考县| 汉川市| 青州市| 南陵县| 霍林郭勒市| 大荔县| 慈利县| 溆浦县| 北辰区| 井研县| 高密市| 洛川县| 贵德县| 靖江市| 灌南县| 手游| 凌源市| 正定县| 天全县| 余干县| 禄劝| 上杭县| 阿克|