MySQL 8 存储JSON

网友投稿 907 2022-08-28

MySQL 8 存储jsON

MySQL 8 存储JSON

要在MySQL中存储数据,必须定义数据库和表结构,但有时做配置后台开关项太多不可能定义几百个字段,用json方法放到一个一个字段里也是必要的。

为了应对这一点,从MySQL 5.7开始,MySQL支恃了 JavaScript对象表示(JavaScriptObject Notation,JSON) 数据类型。

之前,json数据不被支持,只是被存储为字符串。

mysql8JSON数据类型提供了自动验证的JSON文档以及优化的存储格式。

可以通过键或数组索引直接查找子对象或嵌套值,而不需要读取文档中的所有值。

实例测试

创建表

插入JSON

insert into employees.emp_details (emp_no, details)values (‘1’,‘{“location”:“IN”,“phone”:"+11800000000",“email”:“abc@example.com”,“address”:{“line1”:“abc”,“line2”:“xyz street”,“city”:“Bangalore”,“pin”:“560103”}}’);

检索JSON

可以使用->和->>运算符检索JSON列的字段:

select emp_no, details -> ‘$.address.pin’ pin from employees.emp_details;

如果返回值不要引号,用->> 运算符(推荐此方式)

select emp_no, details ->> ‘$.address.pin’ pin from employees.emp_details;

常用的JSON数据函数

1. 优雅浏览

JSON_PRETTY()优雅的格式显示JSON值

select emp_no, json_pretty(details)from employees.emp_detailsG************** 1. row ****************

emp_no: 1

json_pretty(details): {

“email”: “abc@example.com”,

“phone”: “+11800000000”,

“address”: {

“pin”: “560103”,

“city”: “Bangalore”,

“line1”: “abc”,

“line2”: “xyz street”

},

“location”: “IN”

}

2. 查找

可以在WHERE子句中使用col ->> path运算符来引用JSON的某一列

select emp_no, detailsfrom employees.emp_detailswhere details ->> ‘$.address.pin’ = “560103”;

也可以用JSON_CONTAINS函数查询数据。

如果找到了数据,则返回1,否则返回0

select json_contains(details ->> ‘$.address.pin’,“560103”)from employees.emp_details;

返回值:1

如何查询一个key?使用JSON_CONTAINS_PATH函数检查address. line1是否存在

select json_contains_path(details, ‘one’, “$.address.line1”)from employees.emp_details;

返回值:1

one表示至少应该存在一个键,检查address.line1或者address.line2是否存在

返回值:1

如果要检查address.line1或者address.line5是否同时存在,可以使用all,而不是one

返回值:0

有三种函数来修改数据:

在MySQL 8之前的版本中,需要对整个列进行完整的更新,再写回去。

3.1. JSON_SET()

替换现有值并添加不存在的值

************ 1. row ****************

emp_no: 1

json_pretty(details): {

“email”: “abc@example.com”,

“phone”: “+11800000000”,

“address”: {

“pin”: “560100”,

“city”: “Bangalore”,

“line1”: “abc”,

“line2”: “xyz street”

},

“location”: “IN”,

“nickname”: “kai”

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:放弃MyBatis!我选择 JDBCTemplate!
下一篇:开发者们的节日,蕴含着成长的秘密 10.24 心语
相关文章

 发表评论

暂时没有评论,来抢沙发吧~