查询以查找和替换 mysql 数据库的所有表和字段中的文本

che*_*one 3 mysql replace

我需要运行一个查询来查找和替换 mysql 数据库的所有表中的一些文本。

我找到了这个查询,但它只在 tbl_name 表和字段中查找文本。

update tbl_name set column=REPLACE(column, 'fuschia', 'fuchsia'); 
Run Code Online (Sandbox Code Playgroud)

我需要它来查看所有表和所有字段:(数据库中的任何地方)

Rol*_*DBA 6

您需要使用information_schema数据库来生成脚本。

从每个数据库的每个表中收集具有以下条件的所有列:

  • 排除以下数据库:
    • information_schema
    • performance_schema
    • mysql
  • COLUMN_TYPE 具有以下特征之一的值:
    • 以。。开始 CHAR(
    • 以。。开始 VARCHAR(
    • TEXT( TEXT, MEDIUMTEXT, LONGTEXT)结尾

这是获取这些列的查询

SELECT table_schema,table_name,column_name FROM information_schema.columns
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
AND (column_type LIKE 'char(%' OR column_type LIKE 'varchar(%' OR column_type LIKE '%text');
Run Code Online (Sandbox Code Playgroud)

使用上面的查询,构造一组查询,输出 SQL 以转换fuschiafuchsia

SELECT CONCAT('UPDATE ',table_schema,'.',table_name,
' SET ',column_name,'=REPLACE(',column_name,',''fuschia'',''fuchsia'');')
FROM information_schema.columns
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema')
AND (column_type LIKE 'char(%'
OR column_type LIKE 'varchar(%'
OR column_type LIKE '%text');
Run Code Online (Sandbox Code Playgroud)

接受该查询并将其输出发送到文本文件。将文本导入mysql:

SQL="SELECT CONCAT('UPDATE ',table_schema,'.',table_name,"
SQL="${SQL}' SET \`',column_name,'\`=REPLACE(\`',column_name,'\`,''fuschia'',''fuchsia'');') "
SQL="${SQL} FROM information_schema.columns WHERE "
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema') "
SQL="${SQL} AND (column_type LIKE 'char(%' "
SQL="${SQL} OR column_type LIKE 'varchar(%'"
SQL="${SQL} OR column_type LIKE '%text');"
mysql -u... -p... -ANe"${SQL}" > GlobalReplace_fuschia_to_fuchsia.sql
less GlobalReplace_fuschia_to_fuchsia.sql
Run Code Online (Sandbox Code Playgroud)

如果文件看起来不错,请随意执行它。

试一试 !!!