8

別のサーバーに移行したMoodleインストールがあり、古いドメインへのいくつかの参照を変更する必要があります。

すべてのテーブル、すべてのフィールド、およびすべての行を検索する特定のデータベースのMySQLで文字列を別の文字列に置き換えるにはどうすればよいですか?

フィールド名を変更する必要はなく、値だけを変更します。


関連:mySQL replace()を使用して複数のレコードの文字列を置き換えるにはどうすればよいですか?

しかし、回答としてマークされたソリューションは、テーブル名を強く入力することを意味し、スクリプトをN回実行する各テーブルで手動で作業するのではなく、データベース全体にこれを起動する必要があります。

4

3 に答える 3

9

これは少し… 醜いように見えるかもしれません。しかし、単純にデータベースを sql/txt ファイルにダンプし、すべての文字列を置き換えて、変更されたダンプを使用してデータベースを再作成します。

于 2013-01-09T15:17:16.207 に答える
5

次のコードを実行して、更新を行うために実行する必要のあるすべてのudpateステートメントを作成できます。データベース内のすべてのテーブルのすべてのフィールドが更新されます。このコードを実行し、結果をコピーして実行する必要があります。

警告-これは必ずテスト環境でテストしてください。不快な驚きは必要ありません。必要に応じて変更します。

SELECT concat('UPDATE ', TABLE_NAME, ' SET ', COLUMN_NAME, ' = REPLACE(', COLUMN_NAME, ', ''STRING_TO_REPLACE'', ''REPLACE_STRING'')')
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME'
      AND DATA_TYPE IN ('char', 'varchar')
;

これをcharフィールドとvarcharフィールドのみに制限しました。データ型を追加する必要がある場合があります。

于 2013-01-09T15:31:13.820 に答える
3

INFORMATION_SCHEMA.COLUMNS列とテーブルのクエリと動的検索を検討します。データベース内のすべての列とテーブルのカーソルを作成するようなことを試してください:

DECLARE col_names CURSOR FOR
SELECT column_name, table_name
FROM INFORMATION_SCHEMA.COLUMNS

次に、各テーブルの各列を反復処理し、動的/準備済み sql を実行して、文字列が存在する場所を更新します。

正しい方向に進むためのいくつかの良い投稿を次に示します。

https://stackoverflow.com/a/4951354/1073631

https://stackoverflow.com/a/5728155/1073631

于 2013-01-09T15:24:27.823 に答える