MySQL5.7的JSON基本操作(代码示例)


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于MySQL5.7的JSON基本操作(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

MySQL5.7的JSON基本操作

MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的。

建表
在新建表时字段类型可以直接设置为json类型,比如我们创建一张表:

1

mysql> CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `info` JSON);

json类型字段可以为NULL

插入数据:

1

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": "小萌"}');

json类型的字段必须时一个有效的json字符串

可以使用JSON_OBJECT()函数构造json对象:

1

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));

使用JSON_ARRAY()函数构造json数组:

1

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));

现在查看test_user表中的数据:

1

2

3

4

5

6

7

8

9

mysql> select * from test_user;

+----+-----------+--------------------------------------------+

| id | name      | info                                       |

+----+-----------+--------------------------------------------+

|  1 | xiaoming  | {"age": 18, "sex": 1, "nick_name": "小萌"} |

|  2 | xiaohua   | {"age": 17, "sex": 0}                      |

|  3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90]}   |

+----+-----------+--------------------------------------------+

3 rows in set (0.04 sec)

查询
表达式: 对象为json列->'$.键', 数组为json列->'$.键[index]'

1

2

3

4

5

6

7

8

9

mysql> select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user;

+-----------+---------------------+---------------+------------------+

| name      | info->'$.nick_name' | info->'$.sex' | info->'$.tag[0]' |

+-----------+---------------------+---------------+------------------+

| xiaoming  | "小萌"              | 1             | NULL             |

| xiaohua   | NULL                | 0             | NULL             |

| xiaozhang | NULL                | 1             | 3                |

+-----------+---------------------+---------------+------------------+

3 rows in set (0.04 sec)

等价于:对象为JSON_EXTRACT(json列 , '$.键'),数组为JSON_EXTRACT(json列 , '$.键[index]')

1

2

3

4

5

6

7

8

9

mysql> select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]')  from test_user;

 +-----------+-----------------------------------+-----------------------------+--------------------------------+

| name      | JSON_EXTRACT(info, '$.nick_name') | JSON_EXTRACT(info, '$.sex') | JSON_EXTRACT(info, '$.tag[0]')

| +-----------+-----------------------------------+-----------------------------+--------------------------------+

| xiaoming  | "小萌"                            | 1                           | NULL                           |

| xiaohua   | NULL                              | 0                           | NULL                           |

| xiaozhang | NULL                              | 1                           | 3                              |

+-----------+-----------------------------------+-----------------------------+--------------------------------+

3 rows in set (0.04 sec)

不过看到上面"小萌"是带双引号的,这不是我们想要的,可以用JSON_UNQUOTE函数将双引号去掉

1

2

3

4

5

6

7

mysql> select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming';

+----------+-----------------------------------+

| name     | JSON_UNQUOTE(info->'$.nick_name') |

+----------+-----------------------------------+

| xiaoming | 小萌                              |

+----------+-----------------------------------+

1 row in set (0.05 sec)

也可以直接使用操作符->>

1

2

3

4

5

6

7

mysql> select name, info->>'$.nick_name' from test_user where name='xiaoming';

+----------+----------------------+

| name     | info->>'$.nick_name' |

+----------+----------------------+

| xiaoming | 小萌                 |

+----------+----------------------+

1 row in set (0.06 sec)

当然属性也可以作为查询条件

1

2

3

4

5

6

7

mysql> select name, info->>'$.nick_name' from test_user where info->'$.nick_name'='小萌';

+----------+----------------------+

| name     | info->>'$.nick_name' |

+----------+----------------------+

| xiaoming | 小萌                 |

+----------+----------------------+

1 row in set (0.05 sec)

值得一提的是,可以通过虚拟列对JSON类型的指定属性进行快速查询。

阅读剩余部分

相关阅读 >>

数据库高并发请求,如何保证数据完整性?详解mysql/innodb的加锁

mysql存储引擎的作用

mysql索引篇explain命令详解

mysql和相关的timeout详细解析

mysql数据库有哪些特点

mysql如何查询表中某行数据

图文详解mysql中如何查看sql语句的执行时间

mysql怎么创建数据表

mysql批量sql插入性能优化详解

mysql如何进行多表查询

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...