您现在的位置是:亿华云 > IT科技

MySQL JSON数据类型如何操作?这里告诉你~

亿华云2025-10-03 02:22:21【IT科技】5人已围观

简介概述mysql 自 5.7.8 版本开始,就支持了 json 结构的数据存储和查询,这表明了 mysql 也在不断的学习和增加 nosql 数据库的优点。但 mysql 毕竟是关系型数据库,在处理 j

概述

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 :  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 

很赞哦!(326)