相关文章推荐
刀枪不入的红薯  ·  mysql ...·  2 天前    · 
谦逊的沙滩裤  ·  ICLR2020 | ...·  1 年前    · 

MySQL在新版中支持了对JSON格式的支持,用此文章来记录如何在MySQL中使用JSON。一些常见的操作函数。

更多资料请参考官方文档 dev.mysql.com/doc/refman/…

建立JSON格式的表

CREATE TABLE `t1` (
  `id` INT NOT NULL,
  `f1` VARCHAR(45) NULL,
  `f2` JSON NULL,
	PRIMARY KEY (`id`)

对于JSON字段的操作

1.普通的insert

INSERT INTO `t1` VALUES (1,'1','{"a":1, "b":"2"}');

2. 自带函数

JSON_OBJECT

-- 插入json object到数据库
INSERT INTO `t1` VALUES (1, '1', JSON_OBJECT("a", 1, "b", "2"));

JSON_ARRAY

-- 插入json array到数据库
INSERT INTO `t1` VALUES (2, '2', JSON_ARRAY("arr", 1, 2));

JSON_MERGE

-- 合并两个json 
INSERT INTO `t1` VALUES (
	3, '3',
  JSON_MERGE(
  	'{"a":3, "b":"3"}',
    '{"c":3, "d":"3"}',
-- 方法2
INSERT INTO `t1` VALUES (
	4, '4',
  JSON_MERGE(
  	JSON_OBJECT("a", 4, "b", "4"),
    JSON_OBJECT("c", 4, "d", "4")
-- 方法3
INSERT INTO `t1` VALUES (
	5, '5',
  JSON_MERGE(
  	'{"a":5, "b":"5"}',
    JSON_OBJECT("c", 5, "d", "5")

JSON_EXTRACT

-- 用于获取json中的某个字段值
-- 获取f2中base底下的值
SELECT id,JSON_EXTRACT(f2, '$.base') FROM `t1` WHERE id = 1;
-- 获取f2中base底下namelist(jsonarray)的第一个值
SELECT id,JSON_EXTRACT(f2, '$.base.namelist[0]') FROM `t1` WHERE id = 1;
-- 简化形式
SELECT f2 FROM `t1` where f2->'$.base' = 2;

JSON_INSERT

向字段中增加一个key-value,如果这个key存在,则不做任何操作

-- 让id=1的f2字段,增加age字段
UPDATE `t1` SET f2 = JSON_INSERT(f2, '$.age', 10) WHERE id = 1;

JSON_REPLACE

替换内容,如果key不存在,则不做任何操作

-- 将id=1的f2字段中,age字段的值替换为9
UPDATE `t1` SET f2 = JSON_REPLACE(f2, '$.age', 9) WHERE id = 1;

JSON_SET

设置内容,如果key存在,则替换value值,如果key不存在,则增加key-value

-- 将id=1的f2字段中,age字段的值设置为8
UPDATE `t1` SET f2 = JSON_REPLACE(f2, '$.age', 8) WHERE id = 1;

JSON_REMOVE

-- 将id=1的f2字段中,age字段移除
UPDATE `t1` SET f2 = JSON_REMOVE(f2, '$.age') WHERE id = 1;
复制代码
分类:
后端
  •