玩转mysql的json类型

导读

  • mysql在5.7版本之后出了一个json类型字段,方便存储不规则字段,常用为表单的业务字段,原先mysql加个业务字段需要修改表结构。通过json字段则不需要。

例子

  • 没有json类型
字段 解释
id 主键
name 姓名
age 年龄
address 地址
phone 电话
isDel 是否删除
  • 运用json类型
字段 解释
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对象。

思考

  • 如果百万级数据量,这种方式查询效率会比较低,因为没办法加索引,最好是表结构增加一列用于查询。

猜你喜欢

转载自blog.csdn.net/u010318957/article/details/109097920