我需要运行一个查询来查找和替换 mysql 数据库的所有表中的一些文本。
我找到了这个查询,但它只在 tbl_name 表和列字段中查找文本。
update tbl_name set column=REPLACE(column, 'fuschia', 'fuchsia');
Run Code Online (Sandbox Code Playgroud)
我需要它来查看所有表和所有字段:(数据库中的任何地方)
您需要使用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 以转换fuschia
为fuchsia
:
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)
如果文件看起来不错,请随意执行它。
试一试 !!!
归档时间: |
|
查看次数: |
16065 次 |
最近记录: |