mysql 8 json 支持_MySQL8.0新特性_01_JSON数据格式的支持

1. JSON语法规则

数据在名称/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:{Key:Value}、{Key:Array}。

{Key:Value},前面是键,中间是英文的“:”(冒号),然后是值。但是注意的是如果是字符串,严格来说都是英文双引号引起来的。

如:{"Key":"Value"}

{"name" : "鹿晗"} 等价于 name = "鹿晗"

JSON 值范围

数字 (整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组 (在方括号[]中)

对象 (在花括号{}中)

null

JSON 对象

JSON 对象在花括号中,对象可以包含多个名称/值对,如下代码所示:

{

"name": "鹿晗",

"age": 26,

"birthday": "1990年4月20日",

}

这一点也容易理解,与这条 JavaScript 语句等价:

name = "鹿晗";

age = 26;

birthday = "1990年4月20日";

JSON 数组

JSON数组在方括号("[]")中书写,数组可包含多个对象,如下“star_male”描述

{

"star_male": [

{

"name": "鹿晗",

"age": "26"

},

{

"nickname": "李易峰",

"age": "29"

},

{

"nickname": "陈赫",

"lastName": "31"

}

]

}

在上面的例子中,对象 "star_male" 是包含三个对象的数组。每个对象代表一条关于一个明星(姓名和年龄)的记录。

2.JSON基础函数应用:增、删、改、查

创建json的表

use test;

CREATE TABLE t_json(id INT PRIMARY KEY, sname VARCHAR(20) , info JSON);

desc t_json;

插入记录

-- 插入含有json数组的记录 数组格式

INSERT INTO t_json(id,sname,info) VALUES( 1, 'name1', JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME())); # CURTIME() 时间函数 20:24:23.000000

-- 插入含有json对象的记录 使用最多的。

INSERT INTO t_json(id,sname,info) VALUES( 2, 'name2', JSON_OBJECT("age", 20, "time", now())); # now()时间函数的值 2020-11-22 20:26:06.000000

INSERT INTO t_json(id,sname,info) VALUES( 3, 'name3', '{"age":20, "time":"2020-11-22 20:34:00"}'); #对象类型使用居多

查询记录

-- 查询全部的数据

mysql> select * from t_json;

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

| id | sname | info |

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

| 1 | name1 | [1, "abc", null, true, "20:24:23.000000"] |

| 2 | name2 | {"age": 20, "time": "2020-11-22 20:26:06.000000"} |

| 3 | name3 | {"age": 20, "time": "2020-11-22 20:34:00"} |

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

3 rows in set (0.01 sec)

-- 查询记录

SELECT sname,JSON_EXTRACT(info,'$.age') FROM t_json; # 使用函数居多

SELECT sname,info->'$.age' FROM t_json;

-- 查询key

SELECT id,json_keys(info) FROM t_json;

修改记录

-- 增加键

UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.1') WHERE id = 2;

-- 变更值

UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.2') WHERE id = 2;

-- 删除键

UPDATE t_json SET info = json_remove(info,'$.ip') WHERE id = 2;

# 说明:

正常的mysql的语句 UPDATE t_json SET info =

json_set 说明的是 当info字段中没有ip这列的时候,增加一列值 ,如果有列和值的话,修改这列的值。 条件为2的行数

json_remove 说明的是 删除ip这列和值。 条件为2的行数

和set 相关的还有一个 json_replace 有的话就替换,没有的就不操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值