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 有的话就替换,没有的就不操作。