mysql - json类型的应用

在制作动态报表的时候,如果需要字段灵活配置,用 json 存储数据,可以让设计变得非常简单。

业务场景:

绩效系统中,需要从 10 个系统中抓取不同数据,每次只会使用其中 n 个,具体哪几个看领导心情,设计一张表存储抓取到的数据。

  1. 傻瓜式做法,设计一张表,从字段 1 列到字段 10,数据保存在固定的列。
    这种设计可行,但是不利于扩展,回头多一个,有 11 个数据源,大概率要改表了。
  2. 存储数据方面,json 方案几乎是完美的,因为兼容一切格式的数据。

缺点:

  1. 计算:比如说对 10 个值求和,就会发现代码不好写,很多东西需要放到业务代码里处理。
  2. 表格的每一列,数据都是基本固定的,而复杂的 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';

posted on 2023-05-31 11:29  疯狂的妞妞  阅读(40)  评论(0编辑  收藏  举报

导航