亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL操作之JSON數(shù)據(jù)類型操作詳解

 更新時間:2017年10月19日 17:03:03   作者:xiaochao  
這篇文章主要介紹了MySQL操作之JSON數(shù)據(jù)類型操作詳解,內(nèi)容較為詳細(xì),具有收藏價值,需要的朋友可以參考。

上一篇文章我們介紹了mysql數(shù)據(jù)存儲過程參數(shù)實(shí)例詳解,今天我們看看MySQL操作之JSON數(shù)據(jù)類型的相關(guān)內(nèi)容。

概述

mysql自5.7.8版本開始,就支持了json結(jié)構(gòu)的數(shù)據(jù)存儲和查詢,這表明了mysql也在不斷的學(xué)習(xí)和增加nosql數(shù)據(jù)庫的有點(diǎn)。但mysql畢竟是關(guān)系型數(shù)據(jù)庫,在處理json這種非結(jié)構(gòu)化的數(shù)據(jù)時,還是比較別扭的。

創(chuàng)建一個JSON字段的表

首先先創(chuàng)建一個表,這個表包含一個json格式的字段:

CREATE TABLE table_name (
  id INT NOT NULL AUTO_INCREMENT, 
  json_col JSON,
  PRIMARY KEY(id)
);

上面的語句,主要注意json_col這個字段,指定的數(shù)據(jù)類型是JSON。

插入一條簡單的JSON數(shù)據(jù)

INSERT INTO
  table_name (json_col) 
VALUES
  ('{"City": "Galle", "Description": "Best damn city in the world"}');
  

上面這個SQL語句,主要注意VALUES后面的部分,由于json格式的數(shù)據(jù)里,需要有雙引號來標(biāo)識字符串,所以,VALUES后面的內(nèi)容需要用單引號包裹。

插入一條復(fù)雜的JSON數(shù)據(jù)

INSERT INTO table(col) 
VALUES('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}');

這地方,我們插入了一個json數(shù)組。主要還是注意單引號和雙引號的問題。

修改JSON數(shù)據(jù)

之前的例子中,我們插入了幾條JSON數(shù)據(jù),但是如果我們想修改JSON數(shù)據(jù)里的某個內(nèi)容,怎么實(shí)現(xiàn)了?比如我們向 variations 數(shù)組里增加一個元素,可以這樣:

UPDATE myjson SET dict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen') WHERE id = 2;

這個SQL語句中,$符合代表JSON字段,通過.號索引到variations字段,然后通過JSON_ARRAY_APPEND函數(shù)增加一個元素?,F(xiàn)在我們執(zhí)行查詢語句:

SELECT * FROM myjson

得到的結(jié)果是:

+----+-----------------------------------------------------------------------------------------+
| id | dict                                          |
+---+-----------------------------------------------------------------------------------------+
| 2 | {"opening": "Sicilian", "variations": ["pelikan", "dragon", "najdorf", "scheveningen"]} |
+----+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

關(guān)于MySQL中,JSON數(shù)據(jù)的獲取方法,參照官方鏈接JSON Path Syntax

創(chuàng)建索引

MySQL的JSON格式數(shù)據(jù)不能直接創(chuàng)建索引,但是可以變通一下,把要搜索的數(shù)據(jù)單獨(dú)拎出來,單獨(dú)一個數(shù)據(jù)列,然后在這個字段上鍵一個索引。下面是官方的例子:

mysql> CREATE TABLE jemp (
  ->   c JSON,
  ->   g INT GENERATED ALWAYS AS (c->"$.id"),
  ->   INDEX i (g)
  -> );
Query OK, 0 rows affected (0.28 sec)

mysql> INSERT INTO jemp (c) VALUES
   >  ('{"id": "1", "name": "Fred"}'), ('{"id": "2", "name": "Wilma"}'),
   >  ('{"id": "3", "name": "Barney"}'), ('{"id": "4", "name": "Betty"}');
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> SELECT c->>"$.name" AS name
   >   FROM jemp WHERE g > 2;
+--------+
| name  |
+--------+
| Barney |
| Betty |
+--------+
2 rows in set (0.00 sec)

mysql> EXPLAIN SELECT c->>"$.name" AS name
   >  FROM jemp WHERE g > 2\G
*************************** 1. row ***************************
      id: 1
 select_type: SIMPLE
    table: jemp
  partitions: NULL
     type: range
possible_keys: i
     key: i
   key_len: 5
     ref: NULL
     rows: 2
   filtered: 100.00
    Extra: Using where
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
 Level: Note
  Code: 1003
Message: /* select#1 */ select json_unquote(json_extract(`test`.`jemp`.`c`,'$.name'))
AS `name` from `test`.`jemp` where (`test`.`jemp`.`g` > 2)
1 row in set (0.00 sec)

這個例子很簡單,就是把JSON字段里的id字段,單獨(dú)拎出來成字段g,然后在字段g上做索引,查詢條件也是在字段g上。

字符串轉(zhuǎn)JSON格式

把json格式的字符串轉(zhuǎn)換成MySQL的JSON類型:

SELECT CAST('[1,2,3]' as JSON) ;
SELECT CAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' as JSON);

所有MYSQL JSON函數(shù)

Name Description
JSON_APPEND() Append data to JSON document
JSON_ARRAY() Create JSON array
JSON_ARRAY_APPEND() Append data to JSON document
JSON_ARRAY_INSERT() Insert into JSON array-> Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT().
JSON_CONTAINS() Whether JSON document contains specific object at path
JSON_CONTAINS_PATH() Whether JSON document contains any data at path
JSON_DEPTH() Maximum depth of JSON document
JSON_EXTRACT() Return data from JSON document->> Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()).
JSON_INSERT() Insert data into JSON document
JSON_KEYS() Array of keys from JSON document
JSON_LENGTH() Number of elements in JSON document
JSON_MERGE() Merge JSON documents, preserving duplicate keys. Deprecated synonym for JSON_MERGE_PRESERVE()
JSON_MERGE_PRESERVE() Merge JSON documents, preserving duplicate keys
JSON_OBJECT() Create JSON object
JSON_QUOTE() Quote JSON document
JSON_REMOVE() Remove data from JSON document
JSON_REPLACE() Replace values in JSON document
JSON_SEARCH() Path to value within JSON document
JSON_SET() Insert data into JSON document
JSON_TYPE() Type of JSON value
JSON_UNQUOTE() Unquote JSON value
JSON_VALID() Whether JSON value is valid

總結(jié)

以上就是本文關(guān)于MySQL操作之JSON數(shù)據(jù)類型操作詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:mysql數(shù)據(jù)存儲過程參數(shù)實(shí)例詳解、簡述Redis和MySQL的區(qū)別、幾個比較重要的MySQL變量等,如有不足之處,歡迎留言指出,小編會及時回復(fù)大家并進(jìn)行修改,努力為廣大編程愛好及工作者提供更好的文章和閱讀體驗(yàn)。下面推薦幾本跟MySQL操作有關(guān)的書籍,供大家參考:

MySQL數(shù)據(jù)庫應(yīng)用從入門到精通(第2版) PDF掃描版

http://chabaoo.cn/books/361239.html

MySQL5 權(quán)威指南(第3版)中文版 PDF掃描版

http://chabaoo.cn/books/367031.html

希望大家能夠喜歡,更多精彩內(nèi)容盡在:http://chabaoo.cn/

相關(guān)文章

  • MySQL庫表名大小寫的選擇

    MySQL庫表名大小寫的選擇

    一般在數(shù)據(jù)庫使用規(guī)范中,我們都會看到這么一條:庫名及表名一律使用小寫英文。你有沒有思考過,為什么推薦使用小寫呢?庫表名是否應(yīng)該區(qū)分大小寫呢?帶著這些疑問,我們一起來看下本篇文章。
    2021-06-06
  • 在Mysql上創(chuàng)建數(shù)據(jù)表實(shí)例代碼

    在Mysql上創(chuàng)建數(shù)據(jù)表實(shí)例代碼

    這篇文章主要介紹了如何在Mysql上創(chuàng)建數(shù)據(jù)表,需要的朋友可以參考下
    2014-03-03
  • zabbix監(jiān)控mysql的實(shí)例方法

    zabbix監(jiān)控mysql的實(shí)例方法

    在創(chuàng)建監(jiān)控項(xiàng)之前要盡量考慮清楚要監(jiān)控什么,怎么監(jiān)控,監(jiān)控數(shù)據(jù)如何存儲,監(jiān)控數(shù)據(jù)如何展現(xiàn),如何處理報警等。本文主要介紹了zabbix監(jiān)控mysql的實(shí)現(xiàn)方法,感興趣的可以了解一下
    2021-06-06
  • MySQL變更緩沖區(qū)作用、主要配置及查看方法

    MySQL變更緩沖區(qū)作用、主要配置及查看方法

    變更緩沖區(qū)用來緩存對二級索引數(shù)據(jù)的修改,當(dāng)數(shù)據(jù)頁沒有被回載到內(nèi)存中時,先把修改緩存起來,等到其他查詢操作發(fā)生時,數(shù)據(jù)頁被加載到內(nèi)存后,再直接修改內(nèi)存中的數(shù)據(jù)頁,從而達(dá)到減少磁盤I/0的目的,下面給大家介紹MySQL變更緩沖區(qū)及查看方法,感興趣的朋友一起看看吧
    2025-05-05
  • 服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件

    服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件

    這篇文章主要介紹了服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MYSQL使用inner join 進(jìn)行 查詢/刪除/修改示例

    MYSQL使用inner join 進(jìn)行 查詢/刪除/修改示例

    本文為大家介紹下使用inner join 進(jìn)行查詢/刪除/修改,具體實(shí)現(xiàn)如下,學(xué)習(xí)mysql的朋也可以學(xué)習(xí)下,希望對大家有所幫助
    2013-07-07
  • MySQL中查找重復(fù)值的實(shí)現(xiàn)

    MySQL中查找重復(fù)值的實(shí)現(xiàn)

    查找重復(fù)值是一項(xiàng)常見需求,比如在數(shù)據(jù)清理、數(shù)據(jù)分析、數(shù)據(jù)質(zhì)量檢查等場景下,我們常常需要找出表中某列或多列的重復(fù)值,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • mysql alter table 修改表命令詳細(xì)介紹

    mysql alter table 修改表命令詳細(xì)介紹

    MYSQL ALTER TABLE命令用于修改表結(jié)構(gòu),例如添加/修改/刪除字段、索引、主鍵等等,本文章通過實(shí)例向大家介紹MYSQL ALTER TABLE語句的使用方法,需要的朋友可以參考一下。
    2016-10-10
  • MySQL如何將CSV文件快速導(dǎo)入MySQL中

    MySQL如何將CSV文件快速導(dǎo)入MySQL中

    有時候我們可能會把CSV中的數(shù)據(jù)導(dǎo)入到某個數(shù)據(jù)庫的表中,比如做報表分析的時候,下面這篇文章主要給大家介紹了關(guān)于MySQL如何將CSV文件快速導(dǎo)入MySQL中的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 實(shí)例驗(yàn)證MySQL|update字段為相同的值是否會記錄binlog

    實(shí)例驗(yàn)證MySQL|update字段為相同的值是否會記錄binlog

    這篇文章主要介紹了實(shí)例驗(yàn)證MySQL|update字段為相同的值是否會記錄binlog,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-10-10

最新評論