1 Json 类型简介MySQL 5.7 之后提供了Json类型,是MySQL 结合结构化存储和非结构化存储设计出来的一个类型。 在某些场景下,Json 类型简直是福音。 场景1: 用户画像,描述用户的标签等类似场景,比如互联网医院类系统的患者健康档案,有很多信息不是必填项,如:身高、体重、三围等等信息,可以使用 Json 存储。 场景2: 游戏类场景; 场景3: 存储图片等附属信息,比如图片的分辨率,图片标题等。 2 让我们看看Json怎么用的创建表,并插入数据 CREATE TABLE UserLogin ( userId BIGINT NOT NULL, loginInfo JSON, PRIMARY KEY(userId));INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (1, '{\'QQ\': \'82946772\', \'wxchat\': \'破产码农\', \'cellphone\': \'13918888888\'}');INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (2, '{\'cellphone\': \'15026888888\'}');INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (3, '{\'QQ\': \'82946772\', \'wxchat\': \'破产码农\', \'cellphone\': \'13918888889\'}'); 2.1 JSON_EXTRACT 函数,获取Json字段中特定属性的值
获取cellphone属性的值。可以使用->写法或者->>写法。 -- 带引号SELECT loginInfo->'$.cellphone' from UserLogin;-- 不带引号SELECT loginInfo->>'$.cellphone' from UserLogin; 函数说明: JSON_EXTRACT(或->)从JSON文档返回数据。 JSON_UNQUOTE取消引用JSON值,并以utf8mb4字符串的形式返回结果。 2.2 JSON_CONTAINS 查询Json中满足cellphone等于13918888888的记录
说明:使用 JSON_CONTAINS 搜索指定键的值是否与指定值匹配。 2.3 给Json中的字段添加索引-- 增加虚拟列-cellphone,值通过loginInfo计算而来alter table UserLogin add COLUMN cellphone varchar(50) as (loginInfo->>'$.cellphone');-- 给cellphone 这一列增加唯一索引alter table UserLogin add unique index idex_cellphone(cellphone); 可以看到的确使用了该索引进行查询 2.4 JSON_CONTAINS_PATH 判断Json中是否有对应字段所有记录中有多少记录包含wxchat字段
返回 说明,包含wxchat字段有两条记录,不包含的有一条记录。 2.5 JSON_PRETTY 让Json长的更好看SELECT JSON_PRETTY(loginInfo) from UserLogin 可以返回格式化的json数据
2.6 JSON_STORAGE_SIZE返回二进制表示的字节数返回loginInfo字段中存储的二进制表示的字节数。 SELECT max(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin;SELECT avg(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin;SELECT min(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin; 2.7 其他函数
总结
参考: 1、30 mins with MySQL JSON functions:https:///blog/2018/07/23/30-mins-with-mysql-json-functions/ 2、拉钩教育《姜承尧的MySQL实战宝典》-04 | 非结构存储:用好 JSON 这张牌:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=869#/detail/pc?id=7320 |
|
来自: Fengsq501u81r4 > 《计算机》