本文摘自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》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL5.7的JSON基本操作(代码示例)