我认为如果不进行转储,在.sql文件中搜索/替换,然后重新导入它,这是不可能的,但是我想问无论如何......
基本上,有没有办法在一个数据库中的所有表中的所有字段中搜索“samplestring”,并用“examplestring”替换它?
答案 0 :(得分:2)
我不知道一个。如果你愿意/想要查看和修改列名和其他非数据内容,尤其如此。
如果你不经常这样做,那就没问题了。
mysqldump --username user --password pass database | sed 's/somestring/otherstring/g' | mysql -uroot -p
答案 1 :(得分:1)
您可以,但它需要使用动态SQL(MySQL's Prepared Statements)。
首先,您需要获取基于文本的列的列表:
SELECT c.column_name, c.table_name
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.table_schema = your_db_name
AND c.data_type IN ('varchar') -- don't want to replace on an INT/etc
然后你需要迭代该列表来创建UPDATE语句......
答案 2 :(得分:0)
以下是PHP的解决方案:
<?php
// edit this line to add old and new terms which you want to be replaced
$search_replace = array( 'old_term' => 'new_term', 'old_term2' => 'new_term2' );
//change the localhost,username,password and database-name according to your db
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database-name") or die(mysql_error());
$show_tables = mysql_query( 'SHOW TABLES' );
while( $st_rows = mysql_fetch_row( $show_tables ) ) {
foreach( $st_rows as $cur_table ) {
$show_columns = mysql_query( 'SHOW COLUMNS FROM ' . $cur_table );
while( $cc_row = mysql_fetch_assoc( $show_columns ) ) {
$column = $cc_row['Field'];
$type = $cc_row['Type'];
if( strpos( $type, 'char' ) !== false || strpos( $type, 'text' ) !== false ) {
foreach( $search_replace as $old_string => $new_string ) {
$replace_query = 'UPDATE ' . $cur_table .
' SET ' . $column . ' = REPLACE(' . $column .
', \'' . $old_string . '\', \'' . $new_string . '\')';
mysql_query( $replace_query );
}
}
}
}
}
echo 'replaced';
mysql_free_result( $show_columns );
mysql_free_result( $show_tables );
mysql_close( $mysql_link );
?>