mysql中jsonarray的查询和修改

数据初始化

/*
 Navicat Premium Data Transfer

 Source Server         : 47.100.14.70
 Source Server Type    : MySQL
 Source Server Version : 80022
 Source Host           : 47.100.14.70:3306
 Source Schema         : price

 Target Server Type    : MySQL
 Target Server Version : 80022
 File Encoding         : 65001

 Date: 27/12/2023 15:35:50
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for customer
-- ----------------------------
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '客户ID',
  `customer_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户名称',
  `customer_abbreviation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户简称',
  `owners` json NOT NULL COMMENT '客户所有者集合',
  `viewers` json NULL COMMENT '客户使用者集合',
  `delete_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  `creator_id` bigint NOT NULL COMMENT '创建人id',
  `creator_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人名称',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modifier_id` bigint NULL DEFAULT NULL COMMENT '修改人id',
  `modifier_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人名',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '客户表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of customer
-- ----------------------------
INSERT INTO `customer` VALUES (2, '郭辉', 'gh', '[{\"id\": 116, \"userName\": \"guohui\"}, {\"id\": 2, \"userName\": \"guohui\"}]', '[{\"id\": 116, \"userName\": \"gh\"}]', 0, 116, 'gh', '2023-12-26 14:38:26', 0, '', '2023-12-26 14:38:26');
INSERT INTO `customer` VALUES (3, '五期', 'wq', '[{\"id\": 105, \"userName\": \"patrickasd\"}, {\"id\": 106, \"userName\": \"link liu\"}, {\"id\": 107, \"userName\": \"riku\"}]', NULL, 0, 110, 'zz', '2023-12-27 14:33:42', NULL, NULL, '2023-12-27 14:33:42');
INSERT INTO `customer` VALUES (4, 'xsaxsa', '22', '[{\"id\": 110, \"userName\": \"zz\"}, {\"id\": 108, \"userName\": \"zhuxiong\"}, {\"id\": 106, \"userName\": \"link liu\"}]', '[{\"id\": 110, \"userName\": \"zz\"}, {\"id\": 108, \"userName\": \"zhuxiong\"}, {\"id\": 107, \"userName\": \"riku\"}, {\"id\": 106, \"userName\": \"link liu\"}]', 0, 110, 'zz', '2023-12-27 14:56:52', NULL, NULL, '2023-12-27 14:56:52');

SET FOREIGN_KEY_CHECKS = 1;

查询jsonarray字段owners或viewers中id=116的数据

SELECT c.* FROM price.customer c WHERE JSON_CONTAINS(c.owners, '{"id": 116}', '$') > 0 OR JSON_CONTAINS(c.viewers, '{"id": 1116}', '$') > 0;

修改jsonarray字段viewers中id=116的userName数据

UPDATE price.customer
SET viewers = (
    SELECT JSON_ARRAYAGG(JSON_SET(value, '$.userName', '郭辉修改'))
    FROM JSON_TABLE(
        viewers,
        '$[*]' COLUMNS (
            value JSON PATH '$'
        )
    ) AS json_data
)
WHERE JSON_CONTAINS(viewers, '{"id": 116}', '$') > 0;

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱钓鱼的程序员小郭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值