导读
- mysql在5.7版本之后出了一个json类型字段,方便存储不规则字段,常用为表单的业务字段,原先mysql加个业务字段需要修改表结构。通过json字段则不需要。
例子
字段 |
解释 |
id |
主键 |
name |
姓名 |
age |
年龄 |
address |
地址 |
phone |
电话 |
isDel |
是否删除 |
字段 |
解释 |
id |
主键 |
user_json |
用户json {“name”:“翟”,“age”:“26”…} |
isDel |
是否删除 |
如果用户增加删除一个字段,json更加灵活,不需要修改表结构,只存业务字段。
常见使用技巧
查询函数
- JSON_EXTRACT 查询
- JSON_UNQUOTE 去除JSON查询结果所带的双引号
实例
{
"name":"翟",
"age":"26",
"phone": ["13920597981","15122511111"]
"city": {
"code":"999",
"name":"天津"
}
}
查询 姓名
SELECT JSON_UNQUOTE(JSON_EXTRACT(user_json,'$.name')) FROM table;
SELECT user_json -> '$.name' FROM table;
查询 姓名 去掉 双引号
SELECT user_json ->> '$.name' FROM table;
查询第一个手机号
SELECT user_json -> '$.phone[0]' FROM table;
查询城市编码
SELECT user_json -> '$.city.code' FROM table;
实例2
[
{
"name":"呼呼",
},{
"name":"哈哈",
}
]
查询 第一个姓名
SELECT user_json -> '$[0].name' FROM table;
查询 姓名 包含 翟
SELECT * FROM table WHERE demo_json -> '$.name' LIKE "%翟%" ;
查询 姓名 叫 翟胖胖
SELECT * FROM table WHERE demo_json -> '$.name' = "翟胖胖" ;
查询 姓名 叫 翟胖胖 年龄 26岁
SELECT * FROM table WHERE demo_json -> '$.name' = "翟胖胖" AND demo_json -> '$.age' = "26"
查询 年龄为26岁
SELECT JSON_CONTAINS(user_json,'"26"','$.age') FROM table
修改 年龄为10岁的数据 变为 100岁
update demo set demo_json = json_set(demo_json,"$.age",100) where demo_json -> '$.age' = 10
修改数组 手机号
update demo set demo_json = json_set(demo_json,"$.phone",JSON_ARRAY(13920597980,15822688571))
在java中的使用
- 可以通过fastJson很方便的操作json对象。
思考
- 如果百万级数据量,这种方式查询效率会比较低,因为没办法加索引,最好是表结构增加一列用于查询。