西数超哥博客
运维经验教程分享

MySQL查找和替换整个数据库

查找所有表中的某个字符串

我们可以使用以下代码查询数据库中所有表中的某个字符串(例如“oldstring”):

SELECT CONCAT('SELECT \'', table_schema, '.', table_name, '\' AS table_name, COUNT(*) AS instances_found FROM ',
table_schema, '.', table_name, ' WHERE ', column_name, ' LIKE \'%oldstring%\'\;') AS execute_sql
FROM information_schema.columns
WHERE table_schema='your_database_name'
AND column_name NOT IN ('column1_name', 'column2_name'); 

在代码中,您需要将“your_database_name”替换为您的数据库名称,并将“column1_name”和“column2_name”替换为您不需要搜索的列名。执行完上述代码后,您将获得一组结果,如下所示:

+-----------+-------------------+
| table_name | instances_found   |
+-----------+-------------------+
| table1    | 2         |
| table2    | 1         |
| table3    | 0         |
+-----------+-------------------+
这个结果表示我们在三个表中查找”oldstring”字符串。其中,表1中出现了2次,表2中出现了1次,表3中没有出现。

替换整个数据库中的字符串

你可以使用以下代码把整个数据库中的“oldstring”字符串替换成“newstring”:

SET @database_name = 'your_database_name';
SET @old_string = 'oldstring';
SET @new_string = 'newstring';

SELECT CONCAT('UPDATE ', c.table_schema, '.', c.table_name,' SET ', c.column_name,' = REPLACE(', c.column_name,', ''', @old_string,''', ''', @new_string, ''') WHERE ', c.column_name,' LIKE ''%',@old_string, '%'';') AS execute_sql
FROM information_schema.columns c

WHERE table_schema = @database_name
AND data_type IN ('varchar', 'text')
AND column_name NOT IN ('column1_name', 'column2_name');

在这里,您需要将“your_database_name”替换为您的数据库名称,并将每个变量字符串设置为您要替换的旧字符串和新字符串。执行完上述代码后,您将会得到一组结果,该结果将为您提供一组UPDATE语句,每条UPDATE语句都将在每个满足条件的列中替换字符串:

+-----------------------------------------------------------------------------------+
| execute_sql                                                                       |
+-----------------------------------------------------------------------------------+
| UPDATE table_name1 SET column_name1 = REPLACE(column_name1, 'oldstring', 'newstring')
  WHERE column_name1 LIKE '%oldstring%';                                            |
| UPDATE table_name1 SET column_name2 = REPLACE(column_name2, 'oldstring', 'newstring')
  WHERE column_name2 LIKE '%oldstring%';                                            |
| UPDATE table_name2 SET column_name3 = REPLACE(column_name3, 'oldstring', 'newstring')
  WHERE column_name3 LIKE '%oldstring%';                                            |
+-----------------------------------------------------------------------------------+
总结

以上就是在MySQL数据库中进行全局查找和替换的方法。使用这些技巧可以避免手动更改和查找每个表和每个列。通过选择正确的查找和替换语句,您可以更快速地完成任务并提高工作效率。

赞(0)
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除。本站原创内容未经允许不得转载:西数超哥博客 » MySQL查找和替换整个数据库

登录

找回密码

注册