MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见
官方文档
。
简单记一下使用方法,使用的mysql版本:5.7.28-log:
创建一个表 t1,basic_info 字段为JSON类型:
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`basic_info` json DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
插入一条数据:
INSERT INTO `t1`(`id`, `basic_info`) VALUES (1, '{\"age\": 9, \"name\": \"小明\", \"class\": 3}');
一、检索 JSON:
1、查找 JSON 中的某个字段:
比如查询 id=1 的 basic_info 中的 name 字段,可以用以下两种方式:
select basic_info->'$.name' from t1 where id =1;
select JSON_EXTRACT(basic_info, '$.name') from t1 where id =1;
mysql>
select basic_info->'$.name' from t1 where id =1;
+----------------------+
| basic_info->'$.name' |
+----------------------+
| "小明" |
+----------------------+
mysql>
select JSON_EXTRACT(basic_info, '$.name') from t1 where id =1;
+------------------------------------+
| JSON_EXTRACT(basic_info, '$.name') |
+------------------------------------+
| "小明" |
+------------------------------------+
1 row in set (0.04 sec)
2、根据JSON中的某个字段查询表中记录:
比如查询name为小明的记录:
select * from t1 where basic_info->'$.name' = '小明';
select * from t1 where JSON_EXTRACT(basic_info,'$.name') = '小明';
检索JSON数据的方法,文档:
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
二、修改 JSON
修改JSON中字段的方法,文档:
https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html
1、修改 JSON 中的某个字段:
比如我们修改 id =1 的 basic_info 中的age为 10 岁:
可以使用JSON_REPLACE() 或者 JSON_SET() 函数:
update t1 set basic_info = JSON_REPLACE(basic_info, '$.age', 10) where id =1;
update t1 set basic_info = JSON_SET(basic_info, '$.age', 10) where id =1;
2、往 JSON 中插入一个新的字段:
比如往 basic_info 中插入一个性别“gender”字段:
可以使用JSON_INSERT() 或者 JSON_SET() 函数:
update t1 set basic_info = JSON_INSERT(basic_info, '$.gender', '男') where id =1;
update t1 set basic_info = JSON_SET(basic_info, '$.gender', '男') where id =1;
JSON_SET(),JSON_INSERT() 和JSON_REPLACE() 函数的区别:
-
JSON_SET() 支持替换现有值,并且支持添加不存在的值。
-
JSON_INSERT() 插入值而不替换现有值。
-
JSON_REPLACE() 仅替换现有值。
还有一些其他的函数,详见对应官方文档。
MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见官方文档。简单记一下使用方法,使用的mysql版本:5.7.28-log:创建一个表 t1,basic_info 字段为JSON类型:CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `basic_info` json DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=
1、Java 中动态扩展
字段
,会导致数据库表被锁,在
MySQL
5.7.8版本之前,因为
MySQL
不能直接操作
JSON
类型
数据,可以将一个
字段
设定成varchar
类型
,里面存放
JSON
格式数据,这样在需要扩展
字段
时,不需要修改表结构;
2、
mysql
自5.7.8版本开始,就支持了
json
结构的数据存储和查询,这表明了
mysql
也在不断的学习和增加nosql数据库的优点。但
mysql
毕竟是关系型数据库,在处理
json
这种非结构化的数据时,还是比较别扭的。
创建
JSON
类似 varchar,设置
JSON
主要将
字段
的 type 是
json
, 不能设置长度,可以是 NULL 但不能有默认值
用法:
JSON
_REPLACE(
json
_doc, path, val[, path, val] …)用例:
条件
更新
表A中的复杂
JSON
字段
componment_data中的数据
附上官方链接
mysql
官方文档
JSON
函数
修改
json
里的数组
字段
mysql
> set @
json
= '{"test": [{"name": "laravel"}, {"name": "symfony"}]}';
Query OK, 0 rows affected (0.00 sec)
mysql
> select
json
_set(@
json
, '$.test[0].name', "lumen");
TableGo v6.0.0 版震撼发布,此次版本
更新
如下:
1、UI界面大改版,组件大调整,提升界面功能的可扩展性。
2、新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Java主题。
3、新增合并增量
更新
功能,并能指定代码中哪些代码块动态
更新
,哪些代码块不
更新
。
4、新增文件
更新
方式配置,可根据需要使用增量
更新
和覆盖
更新
。
5、新增保存全局参数和自定义文件的
JSON
参管理功能。
6、生成自定义文件新增
JSON
参数配置,可以灵活定义各种参数并能将代码直接生成到项目源码目录中去。
7、生成自定义文件新增是否生成单一文件配置和是否收集扩展信息配置。
8、生成自定义文件新增和调整了多个参数,使模板编写更加方便快捷。
9、生成数据库文档功能新增生成标题目录功能。
10、新增主要UI界面的界面大小配置功能,可根据需求在配置文件中调整UI界面大小。
11、新增友情捐赠界面,项目的发展离不开您的支持,无论捐赠金额多少都足够表达您对我的支持。
12、新增捐赠名单界面,所有捐赠者的捐赠信息和留言都会在这里展示,以此留名。
13、按
字段
生成JavaBean工具新增选择自定义模板功能。
14、新增
MySQL
关键字表名兼容性。
15、新增log4j2,TableGo的运行日志将在logs目录中输出,方便
查找
问题。
16、公共参数移除两个扩展参数配置,生成JavaBean功能移除用户模板配置。
17、新增TableGo官网:http://www.tablego.cn
18、新增数据信息界面,定时从官网
更新
数据,捐赠名单也自动从官网
更新
数据。
19、新增TableGo新版本提示功能,如果官网有新版本发布,客户端会有
更新
提醒。
20、性能优化并修复已知Bug。
一直以来把数据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个
字段
,真是一件让人很头痛的事情。
我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表
字段
的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持
MySQL
、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊
查找
生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了!
更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表。
这次版本
更新
如下:
1、新增换肤功能,38款皮肤任你选,总有一款适合你。
如果你有更好的皮肤希望能提供给我,将在下个版本中集成进去给大家使用。
2、新增表名转驼峰命名工具。
3、新增驼峰命名转表名工具。
4、新增
JSON
字符串格式化工具。
5、新增XML字符串格式化工具。
6、新增
JSON
To XML工具。
7、新增XML To
JSON
工具。
8、更换LOGO(包括程序的图标和界面标题栏的图标)。
9、现在数据库密码可以为空啦。
10、取消精确匹配的双击功能。
CREATE TABLE `user_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`details`
json
DEFAU.
MySQL
的一些
字段
类型
可以存储类似于
JSON
的数据结构。例如,
JSON
数据
类型
在
MySQL
5.7版本中被引入,在之前的版本中,可以使用VARCHAR或TEXT
字段
类型
存储类似
JSON
的数据。
与
JSON
相似,这些
MySQL
字段
可以存储具有嵌套结构的数据。例如,可以在一个
JSON
数组中存储多个键值对,就像在
MySQL
的
JSON
字段
中一样。此外,与
JSON
不同的是,
MySQL
提供了一些函数来在查询中针对
JSON
数据
类型
进行操作。这些函数包括
JSON
_EXTRACT,
JSON
_CONTAINS,
JSON
_UNQUOTE等。
将数据存储为
JSON
格式可以方便地处理具有多层结构的数据,例如,我们可以使用
JSON
对象来存储用户的个人资料,该对象可以包含多个嵌套键值对,如姓名、地址、电话号码等。此外,对于需要快速索引的
JSON
键,可以通过
MySQL
提供的
JSON
索引功能来支持。
总之,
MySQL
的
字段
类似
JSON
,为存储和操作具有多层结构的数据提供了方便和灵活性。