MySQL5.7对json的操作

场景:

Mysql中需要存储用户的相关证件信息,即存储图片信息, 数量不定。这时候通常采用的做法:

1、定义多个存储字段,限制上传图片数量。

2、定义一个存储字段,多个图片用分隔符隔开,做为字符串存储。

3、独立定义附件表,用来单独存储图片。

1、2都不是很建议,但是具体还是要看业务咯。这里介绍另一种方式,即直接存储json.

 

MySQL5.7开始支持Json类型

在MySQL5.7.8中,MySQL支持由RFC 7159定义的本地JSON数据类型,它支持对JSON(JavaScript对象标记)文档中的数据进行有效访问。

MySQL5.7.9开始可以使用column->path来做为JSON_EXTRACT(column, path)的快捷使用。->的左边为json数据列名,右边为json数据的某个路径表达式。如:t.attr -> '$.id'。

常用函数

CREATE TABLE `demo-boot`.`Untitled`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `license` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

JSON_OBJECT:创建json对象

JSON_ARRAY:创建json数组

insert into t_json_test (license) values (JSON_OBJECT("name", "身份证", "value", "http://images.com/1.png"));   -- 插入json对象
insert into t_json_test (license) values (JSON_ARRAY("name", "身份证", "value", "http://images.com/1.png", "name", "驾照", "value", "http://images.com/2.png"));   -- 插入json数组
insert into t_json_test (license) values (JSON_ARRAY(JSON_OBJECT("name", "身份证", "value", "http://images.com/1.png"), JSON_OBJECT("name", "驾照", "value", "http://images.com/2.png")));  -- 插入json对象数组

SQL执行对应结果:

column -> path查询(注意这里只能操作json对象,对于json数组无效):

select license -> '$.value' as license_img from t_json_test where id=8

column ->> path,等同于json_unquote,去除json字符串的引号:

select license ->> '$.value' as license_img from t_json_test where id=8

如果是json数组,可以采用column -> '$[index].prop'的方式:

select license ->> '$[0].name' as license_img from t_json_test where id=10  -- '$[*].name'代表全部

JSON_SET,通过key修改value

select JSON_SET(license, '$[0].name', '护照') from t_json_test

JSON_INSERT,新增一个不存在的key。

update t_json_test set license=JSON_INSERT(license, '$[0].phone', '13333333333') -- 如果是对象,使用'$.phone'

上述列出一些常用的MySQL操作json的方法。

更多json操作函数参考:https://dev.mysql.com/doc/refman/5.7/en/json-functions.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有一只柴犬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值