模式切换
MySQL 中如何批量修改某一字段中的数据
【需求】
在 MySQL 中写一条 SQL 实现将 url 中 http://192.168.2.6:9000 批量改为 http://192.168.51.123:9000
表结构及示例数据如下:
sql
-- ----------------------------
-- Table structure for sys_oss
-- ----------------------------
DROP TABLE IF EXISTS `sys_oss`;
CREATE TABLE `sys_oss` (
`oss_id` bigint NOT NULL COMMENT '对象存储主键',
`tenant_id` varchar(20) COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
`file_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件名',
`original_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原名',
`file_suffix` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件后缀名',
`url` varchar(500) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'URL地址',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` bigint DEFAULT NULL COMMENT '上传人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` bigint DEFAULT NULL COMMENT '更新人',
`service` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'minio' COMMENT '服务商',
PRIMARY KEY (`oss_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OSS对象存储表';
-- ----------------------------
-- Records of sys_oss
-- ----------------------------
BEGIN;
INSERT INTO `sys_oss` VALUES (1814325010934108161, '000000', '2024/07/19/81cc22094efb4d70b95f49d0d43013aa.png', '测试专用图.png', '.png', 'http://192.168.2.6:9000/mjch/2024/07/19/81cc22094efb4d70b95f49d0d43013aa.png', 103, '2024-07-19 23:42:46', 1, '2024-07-19 23:42:46', 1, 'minio');
INSERT INTO `sys_oss` VALUES (1815590913332068353, '000000', '2024/07/23/2ab34ed686024cc191bf03f7e4a0d34c.jpg', 'QRCode.jpg', '.jpg', 'http://192.168.2.6:9000/mjch/2024/07/23/2ab34ed686024cc191bf03f7e4a0d34c.jpg', 103, '2024-07-23 11:33:00', 1, '2024-07-23 11:33:00', 1, 'minio');
COMMIT;
【解决】
使用 MySQL 的 REPLACE
函数来实现这个需求。这个函数可以在指定的字符串中替换所有匹配的子串。
sql
UPDATE `sys_oss`
SET `url` = REPLACE(`url`, 'http://192.168.2.6:9000', 'http://192.168.51.123:9000');
替换后的数据:
sql
BEGIN;
INSERT INTO `sys_oss` VALUES (1814325010934108161, '000000', '2024/07/19/81cc22094efb4d70b95f49d0d43013aa.png', '测试专用图.png', '.png', 'http://192.168.51.123:9000/mjch/2024/07/19/81cc22094efb4d70b95f49d0d43013aa.png', 103, '2024-07-19 23:42:46', 1, '2024-07-19 23:42:46', 1, 'minio');
INSERT INTO `sys_oss` VALUES (1815590913332068353, '000000', '2024/07/23/2ab34ed686024cc191bf03f7e4a0d34c.jpg', 'QRCode.jpg', '.jpg', 'http://192.168.51.123:9000/mjch/2024/07/23/2ab34ed686024cc191bf03f7e4a0d34c.jpg', 103, '2024-07-23 11:33:00', 1, '2024-07-23 11:33:00', 1, 'minio');
COMMIT;