mysql - json类型的应用
在制作动态报表的时候,如果需要字段灵活配置,用 json 存储数据,可以让设计变得非常简单。
业务场景:
绩效系统中,需要从 10 个系统中抓取不同数据,每次只会使用其中 n 个,具体哪几个看领导心情,设计一张表存储抓取到的数据。
- 傻瓜式做法,设计一张表,从字段 1 列到字段 10,数据保存在固定的列。
这种设计可行,但是不利于扩展,回头多一个,有 11 个数据源,大概率要改表了。 - 存储数据方面,json 方案几乎是完美的,因为兼容一切格式的数据。
缺点:
- 计算:比如说对 10 个值求和,就会发现代码不好写,很多东西需要放到业务代码里处理。
- 表格的每一列,数据都是基本固定的,而复杂的 json 未经过解析,很难直观看出包含哪些内容。
CREATE TABLE `test_json` (
`id` varchar(32) NOT NULL,
`content` json DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 设置内容
UPDATE test_json SET content='{"age":20, "name":"xiaoming"}' WHERE id = 'test';
-- 查询 json 中的一个字段
SELECT content->'$.name' FROM test_json where id = 'test';
-- 查询
SELECT content FROM test_json where id = 'test';
-- 更新字段
UPDATE test_json SET content = JSON_SET(content, '$.name', 'xiaodong') where id = 'test';
UPDATE test_json SET content = JSON_SET(JSON_SET(content, '$.age', 18), '$.name', 'xiaodong') where id = 'test';
-- 移除字段值
UPDATE test_json SET content = JSON_REMOVE(content, '$.name') where id = 'test';
-- 替换,原先无值,不会更新
UPDATE test_json SET content = JSON_REPLACE(content, '$.name', 'xiaoming') where id = 'test';
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!