在整个mysql数据库中查找和replace
我想在整个数据库中查找和replace,而不仅仅是一个表。
我怎样才能改变下面的脚本工作?
update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
我只是使用星号?
update * set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
sqldump转换为文本文件,find/replace,重新导入sqldump。
将数据库转储到文本文件
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
修改完成后还原数据库。
mysql -u root -p[root_password] [database_name] < dumpfilename.sql
在word中按下新的URL更新旧的URL mysql Query:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com'); UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com'); UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
这强烈暗示您的数据不是以规范开始的。 你真的应该解决这个问题。
Somteh =像这样的东西应该可以工作(注意你没有提到你使用任何其他语言 – 所以它被写成一个MySQL存储过程)
create procedure replace_all(find varchar(255), replce varchar(255), indb varcv=char(255)) DECLARE loopdone INTEGER DEFAULT 0; DECLARE currtable varchar(100); DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name FROM information_schema.tables t, information_schema.columns c WHERE t.table_schema=indb AND c.table_schema=indb AND t.table_name=c.table_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET loopdone = 1; OPEN alltables; tableloop: LOOP FETCH alltables INTO currtable, currcol; IF (loopdone>0) THEN LEAVE LOOP; END IF; SET stmt=CONCAT('UPDATE ', indb, '.', currtable, ' SET ', currcol, ' = word_sub(\'', find, '\','\'', replce, '\') WHERE ', currcol, ' LIKE \'%', find, '%\''); PREPARE s1 FROM stmt; EXECUTE s1; DEALLOCATE PREPARE s1; END LOOP; END //
我将给你解决如何声明word_sub函数 – 我在这里做了足够的免费编程。
简短的回答:你不能。
长答案:您可以使用INFORMATION_SCHEMA来获取表定义,并使用它来dynamic地生成必要的UPDATE语句。 例如,你可以从这开始:
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your_schema'
如果可能的话,我尽量避免这样做。
这是不可能的 – 你需要单独执行每个表的更新。
警告:DUBIOUS,但它将工作(可能)的解决scheme如下
或者,您可以通过mysqldump转储数据库,只需对生成的SQL文件执行search/replace即可。 (我build议在正在进行的过程中将任何可能会触及数据库的东西以及使用–add-drop-table和–extended-insert标志删除)。但是,您需要确保search/replace文本不会改变除数据本身以外的任何东西(即:您将要换出的文本可能不会作为SQL语法的一部分出现), 我真的会尝试重新插入首先是一个空的testing数据库 。)
MySQLsearch和replace工具
使用PHP编写的非常有用的基于Web的工具,可以轻松地在MySQL数据库中search和replace文本string。
简单的解决
UPDATE `table_name` SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
另一个select(取决于用例)将使用DataMystic的TextPipe和DataPipe产品。 我曾经使用过它们,在复杂的replace场景中他们工作得很好,而且不需要将数据从数据库中导出来查找和replace。
我只想分享我如何用sql数据库进行查找/replace,因为我需要从Chrome的sessionbuddy数据库文件中replace链接。
- 所以我通过使用SQLite数据库浏览器2.0 b1导出sql数据库文件为.txt文件
- 查找/replace记事本++
- 导入.txt文件回到SQLite数据库浏览器2.0 b1
小心,用REPLACE命令replace!
为什么?
因为你的数据库很可能包含序列化的数据(特别是wp_options表),所以你会打破你的网站选项。
相反,使用标准的方式,列在链接上: – https://www.protectpages.com/software/WordpressMigrator.php