web-dev-qa-db-ja.com

mysql dbのすべてのテーブルとフィールドのテキストを検索して置き換えるクエリ

Mysqlデータベースのすべてのテーブルでテキストを検索して置き換えるためにクエリを実行する必要があります。

このクエリは見つかりましたが、tbl_nameテーブルとcolumnフィールドのテキストのみを検索します。

update tbl_name set column=REPLACE(column, 'fuschia', 'Fuchsia'); 

すべてのテーブルとすべてのフィールドを検索する必要があります:(データベースのすべての場所)

3
chefnelone

スクリプトを生成するには、information_schemaデータベースを使用する必要があります。

次の基準を持つすべてのデータベースのすべてのテーブルからすべての列を収集します。

  • 次のデータベースを除外:
    • information_schema
    • performance_schema
    • mysql
  • COLUMN_TYPE値。次のいずれかの特性があります:
    • CHAR(で始まる
    • VARCHAR(で始まる
    • TEXTで終わる(TEXTMEDIUMTEXTLONGTEXT

これらの列を取得するクエリは次のとおりです

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');

上記のクエリを使用して、fuschiaFuchsiaに変換するSQLを出力するクエリのセットを作成します。

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');

そのクエリを受け取り、その出力をテキストファイルに送信します。 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

ファイルに問題がなければ、自由に実行してください。

試してみる !!!

6
RolandoMySQLDBA