MySQL-5.7环境下全局替换任意字段下URL方法

一、需求

由于文件服务器迁移、域名变更、云存储迁移图片素材等场景下,数据库中涉及到url文件地址信息的表字段内容需要涉及到前缀替换;

二、MySQL数据库

温馨小提示:基于mysql5.7版本

查询指定库中所有表字段信息

SELECT TABLE_NAME, column_name, DATA_TYPE, column_comment FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '指定库';

-- ex: 
SELECT TABLE_NAME, column_name, DATA_TYPE, column_comment FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'demo';

截取字段内容

SELECT substring( 指定字段, 从左到右需要截掉的长度 , LENGTH( substring( 指定字段, 1 )) ) FROM 指定表;

-- ex: 
SELECT substring( url, 28, LENGTH( substring( url, 1 )) ) FROM t_demo;

查询指定字段包含指定内容的结果

SELECT * FROM 指定表 WHERE locate('指定内容' , 指定字段);

-- ex: 
SELECT * FROM t_demo WHERE locate( 'https://', url );

更新字段值

UPDATE 指定表 SET 指定字段 =( substring( 指定字段, 从左到右需要截掉的长度, LENGTH( substring( 指定字段, 1 )) ))  WHERE LENGTH( substring( 指定字段, 1 ))> 0 AND locate( '指定内容', 指定字段 );

-- ex:
UPDATE t_demo SET url =( substring( url, 28, LENGTH( substring( url, 1 )) ))  WHERE LENGTH( substring( url, 1 ))> 0 AND locate( 'https://', url );

拼接最终更新字段值sql语句

SELECT
    CONCAT( 'update ', TABLE_NAME, ' set ', column_name, '=( substring(', column_name, ', 从左到右需要截掉的长度 ,LENGTH(substring(', column_name, ',1)) )) where LENGTH(substring(', column_name, ',1))>0 and locate(''指定内容'' , ', column_name, ');' ) 
FROM
    information_schema.COLUMNS 
WHERE
    TABLE_SCHEMA = '指定库'

-- ex: 
SELECT CONCAT( 'update ', TABLE_NAME, ' set ', column_name, '=( substring(', column_name, ',28,LENGTH(substring(', column_name, ',1)) )) where LENGTH(substring(', column_name, ',1))>0 and locate(''https://'' , ', column_name, ');' ) FROM information_schema.COLUMNS  WHERE TABLE_SCHEMA = 'demo'

最后复制拼接好的sql运行即可


MySQL-5.7环境下全局替换任意字段下URL方法
https://cn.10691.cn//archives/10009
作者
Ley
发布于
2021年06月11日
许可协议