Mysql json常用操作

表结构和测试数据

mysql> show create table tags \G
*************************** 1. row ***************************
       Table: tags
Create Table: CREATE TABLE `tags` (
  `uuid` varchar(128) DEFAULT NULL,
  `values` json DEFAULT NULL,
  KEY `uuid_idx_1` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> select * from tags where uuid ='1' \G
*************************** 1. row ***************************
uuid: 1
values: {"k1": "value1", "k2": "value2"}
1 row in set (0.00 sec)

给uuid=1的标签增加一个key: 使用json_merge

mysql> update tags set values = json_merge(values, '{"200" : "abc"}') where uuid = '1';

注意:使用json_merge时,如果没有这个key,会新增,若有,则会把新value合并到原key的value,形成数组

给uuid=1的标签增加一个key:使用json_set

mysql> update tags set values = json_set(values, '$."400"', "123456") where uuid = '1';

注意:使用json_set时,如果没有这个key,会新增,若有,则会被替换。

给uuid=1的标签删掉一个key,使用json_remove

mysql> update tags set values = json_remove(values, '$."100"') where uuid = '1';