光环大数据告诉你 MySQL JSON 数据类型如何操作

编辑:光环大数据 来源: 互联网 时间: 2017-12-14 18:10 阅读:

光环大数据(大数据培训的专业机构), mysql 自 5.7.8 版本开始,就支持了 json 结构的数据存储和查询,这表明了 mysql 也在不断的学习和增加 nosql 数据库的优点。但 mysql 毕竟是关系型数据库,在处理 json 这种非结构化的数据时,还是比较别扭的。创建 ...

数据库 SQL MySQL Hadoop RAC

mySQL 自 5.7.8 版本开始,就支持了 json 结构的数据存储和查询,这表明了 mysql 也在不断的学习和增加 NoSQL 数据库的优点。但 mysql 毕竟是关系型数据库,在处理 json 这种非结构化的数据时,还是比较别扭的。
创建一个 JSON 字段的表首先先创建一个表,这个表包含一个 json 格式的字段:CREATE TABLE table_name (    id INT NOT NULL AUTO_INCREMENT,     json_col JSON,    PRIMARY KEY(id));
上面的语句,主要注意 json_col 这个字段,指定的数据类型是 JSON。
插入一条简单的 JSON 数据INSERT INTO    table_name (json_col) VALUES    ('{"City": "Galle", "Description": "Best damn city in the world"}');
上面这个 SQL 语句,主要注意 VALUES 后面的部分,由于 json 格式的数据里,需要有双引号来标识字符串,所以,VALUES 后面的内容需要用单引号包裹。
插入一条复杂的 JSON 数据INSERT INTO table(col) VALUES('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}');
这地方,我们插入了一个 json 数组。主要还是注意单引号和双引号的问题。
修改 JSON 数据之前的例子中,我们插入了几条 JSON 数据,但是如果我们想修改 JSON 数据里的某个内容,怎么实现了?比如我们向 variations 数组里增加一个元素,可以这样:UPDATE myjson SET dict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen') WHERE id = 2;
这个 SQL 语句中,$ 符合代表 JSON 字段,通过. 号索引到 variations 字段,然后通过 JSON_ARRAY_APPEND 函数增加一个元素。现在我们执行查询语句:SELECT * FROM myjson得到的结果是:+----+-----------------------------------------------------------------------------------------+| id | dict                                                                                    |+---+-----------------------------------------------------------------------------------------+| 2  | {"opening": "Sicilian", "variations": ["pelikan", "dragon", "najdorf", "scheveningen"]} |+----+-----------------------------------------------------------------------------------------+1 row in set (0.00 sec)
关于 MySQL 中,JSON 数据的获取方法,参照官方链接 JSON Path Syntax
创建索引MySQL 的 JSON 格式数据不能直接创建索引,但是可以变通一下,把要搜索的数据单独拎出来,单独一个数据列,然后在这个字段上键一个索引。下面是官方的例子: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: 0mysql> 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: rangepossible_keys: i          key: i      key_len: 5          ref: NULL         rows: 2     filtered: 100.00        Extra: Using where1 row in set, 1 warning (0.00 sec)mysql> SHOW WARNINGS/G*************************** 1. row ***************************  Level: Note   Code: 1003Message: /* 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 字段,单独拎出来成字段 g,然后在字段 g 上做索引,查询条件也是在字段 g 上。字符串转 JSON 格式把 json 格式的字符串转换成 MySQL 的 JSON 类型:SELECT CAST('[1,2,3]' as JSON) ;SELECT CAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' as JSON);
所有 MYSQL JSON 函数Name  DescriptionJSON_APPEND()  Append data to JSON documentJSON_ARRAY()  Create JSON arrayJSON_ARRAY_APPEND()  Append data to JSON documentJSON_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 pathJSON_CONTAINS_PATH()  Whether JSON document contains any data at pathJSON_DEPTH()  Maximum depth of JSON documentJSON_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 documentJSON_KEYS()  Array of keys from JSON documentJSON_LENGTH()  Number of elements in JSON documentJSON_MERGE()  Merge JSON documents, preserving duplicate keys. Deprecated synonym for JSON_MERGE_PRESERVE()JSON_MERGE_PRESERVE()  Merge JSON documents, preserving duplicate keysJSON_OBJECT()  Create JSON objectJSON_QUOTE()  Quote JSON documentJSON_REMOVE()  Remove data from JSON documentJSON_REPLACE()  Replace values in JSON documentJSON_SEARCH()  Path to value within JSON documentJSON_SET()  Insert data into JSON documentJSON_TYPE()  Type of JSON valueJSON_UNQUOTE()  Unquote JSON valueJSON_VALID()  Whether JSON value is valid

 

     大数据+时代,大数据培训机构,就选光环大数据!

   原创文章,转载请注明出处:光环大数据官网。


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();