簡體   English   中英

如何在MySQL數據庫中替換所有行中所有字段中的所有表?

[英]How can I replace a string in a MySQL database for all tables in all fields in all rows?

我有一個Moodle安裝,我遷移到另一台服務器,我需要更改幾個舊域的引用。

對於搜索所有表,所有字段和所有行的給定數據庫如何在MySQL中替換另一個字符串的字符串

我不需要更改字段名稱,只需更改值。


相關: 如何使用mySQL replace()替換多個記錄中的字符串?

但標記為答案解決方案意味着我強烈鍵入表名稱,我需要將其激活到整個數據庫,而不是手動處理運行該腳本的每個表N次。

這可能看起來有點......丑陋。 但也許只需將數據庫轉儲到sql / txt文件,替換所有字符串並使用修改后的轉儲重新創建數據庫。

您可以運行以下代碼來創建運行以進行更新所需的所有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字段。 您可能需要添加其他數據類型。

我會考慮查詢INFORMATION_SCHEMA.COLUMNS並動態搜索列和表。 嘗試在db中創建所有列和表的游標:

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

然后遍歷每個表中的每個列,並運行dynamic / prepared sql來更新字符串所在的位置。

以下是一些很好的帖子,可以幫助您找到正確的方向:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM