MySQL中JSON数据类型的使用(2)——定义JSON类型的数据列

MySQL中JSON数据类型的使用(2)——定义JSON类型的数据列

自 MySQL5.7.8 版本以来,MySQL 支持 JSON 数据类型。MySQL 以内部格式存储 JSON 文档,允许对文档元素的快速读取访问。

MySQL定义JSON数据类型的语法如下:

CREATE TABLE table_name (
    ...
    json_column_name JSON,
    ... 
);

1、创建包含JSON类型列的表

创建一个学生(student)表,命令如下:

create table student(
    id int primary key,
    name char(20),
    birth datetime,
    contact json
);

2、插入数据

insert into student values(20190201,'ZhangTao','1999-1-20','{"phone":"15937320588","QQ":"2589781425","wechart":"15937320588"}');
insert into student values(20190202,'LiPengfei','1998-10-25','{"phone":"13903730582","QQ":"2589781466","wechart":"13903730582"}');
insert into student values(20190203,'LiuFei','1999-11-2','{"phone":"13072615888","QQ":"1789781433","wechart":"wa159373"}');
insert into student values(20190204,'ZhangTao','2000-8-6','{"phone":"15037334666","QQ":"1889781467","wechart":"pa2568988"}');
insert into student values(20190205,'ZhouPeng','2000-6-19','{"phone":"15346382599","QQ":"6689781444","wechart":"ww26779821"}');

3、查看所有数据

mysql> select * from student;
+----------+-----------+---------------------+------------------------------------------------------------------------+
| id       | name      | birth               | contact                                                                |
+----------+-----------+---------------------+------------------------------------------------------------------------+
| 20190201 | ZhangTao  | 1999-01-20 00:00:00 | {
   
   "QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | {
   
   "QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} |
| 20190203 | LiuFei    | 1999-11-02 00:00:00 | {
   
   "QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"}    |
| 20190204 | ZhangTao  | 2000-08-06 00:00:00 | {
   
   "QQ": "1889781467", "phone": "15037334666", "wechart": "pa2568988"}   |
| 20190205 | ZhouPeng  | 2000-06-19 00:00:00 | {
   
   "QQ": "6689781444", "phone": "15346382599", "wechart": "ww26779821"}  |
+----------+-----------+---------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

4、查看电话

要从 JSON 列中取出值,可以使用 JSON 路径运算符( -> )或者( ->> )。

mysql> select id,name,birth,contact -> '$.phone' phone from student;
+----------+-----------+---------------------+---------------+
| id       | name      | birth               | phone         |
+----------+-----------+---------------------+---------------+
| 20190201 | ZhangTao  | 1999-01-20 00:00:00 | "15937320588" |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | "13903730582" |
| 20190203 | LiuFei    | 1999-11-02 00:00:00 | "13072615888" |
| 20190204 | ZhangTao  | 2000-08-06 00:00:00 | "15037334666" |
| 20190205 | ZhouPeng  | 2000-06-19 00:00:00 | "15346382599" |
+----------+-----------+---------------------+---------------+
5 rows in set (0.00 sec)

如果希望取消 phone 两边的引号,可以使用如下命令:

mysql> select id,name,birth,contact ->> '$.phone' phone from student;
+----------+-----------+---------------------+-------------+
| id       | name      | birth               | phone       |
+----------+-----------+---------------------+-------------+
| 20190201 | ZhangTao  | 1999-01-20 00:00:00 | 15937320588 |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | 13903730582 |
| 20190203 | LiuFei    | 1999-11-02 00:00:00 | 13072615888 |
| 20190204 | ZhangTao  | 2000-08-06 00:00:00 | 15037334666 |
| 20190205 | ZhouPeng  | 2000-06-19 00:00:00 | 15346382599 |
+----------+-----------+---------------------+-------------+
5 rows in set (0.00 sec)

5、查看QQ号以“25”开头的学生

mysql> select id,name,contact from student where contact ->> '$.QQ' like '25%';
+----------+-----------+------------------------------------------------------------------------+
| id       | name      | contact                                                                |
+----------+-----------+------------------------------------------------------------------------+
| 20190201 | ZhangTao  | {
   
   "QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} |
| 20190202 | LiPengfei | {
   
   "QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} |
+----------+-----------+------------------------------------------------------------------------+
2 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/107825029