i would like to do a find and replace inside an entire database not just a table.
How can i alter the script below to work?
update [table_name] set [field_name] =
Do i just use an asterix?
update * set [field_name] =
sqldump to a text file, find/replace, re-import the sqldump.
Dump the database to a text file
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
Restore the database after you have made changes to it.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql
Update old URL to new URL in word-press 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');
This strongly implies that your data IS NOT NORMALISED to begin with. You really should fix that.
Somteh=thing like this should work (NB you’ve not mentioned of your using any other languages – so its written as a MySQL stored procedure)
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 //
I’ll leave it to you to work out how to declare the word_sub function – I’ve done enough free programming here.
Short answer: You can’t.
Long answer: You can use the INFORMATION_SCHEMA to get the table definitions and use this to generate the necessary UPDATE statements dynamically. For example you could start with this:
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your_schema'
I’d try to avoid doing this though if at all possible.
This isn’t possible – you need to carry out an UPDATE for each table individually.
WARNING: DUBIOUS, BUT IT’LL WORK (PROBABLY) SOLUTION FOLLOWS
Alternatively, you could dump the database via mysqldump and simply perform the search/replace on the resultant SQL file. (I’d recommend offlining anything that might touch the database whilst this is in progress, as well as using the –add-drop-table and –extended-insert flags.) However, you’d need to be sure that the search/replace text wasn’t going to alter anything other than the data itself (i.e.: that the text you were going to swap out might not occur as a part of SQL syntax) and I’d really try doing the re-insert on an empty test database first.)
Very useful web-based tool written in PHP which makes it easy to search and replace text strings in a MySQL database.
UPDATE `table_name` SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
Another option (depending on the use case) would be to use DataMystic’s TextPipe and DataPipe products. I’ve used them in the past, and they’ve worked great in the complex replacement scenarios, and without having to export data out of the database for find-and-replace.
I just wanted to share how I did this find/replace thing with sql database, because I needed to replace links from Chrome’s sessionbuddy db file.
- So I exported sql database file as .txt file by using SQLite
Database Browser 2.0 b1
- Find/replace in notepad++
- Imported the .txt file back on SQLite Database Browser 2.0 b1
BE CAREFUL, when replacing with REPLACE command!
because there is a great chance that your database contains serialized data (especially wp_options table), so you will break your site options.
Instead, use standard way, listed on the link: – https://www.protectpages.com/software/WordpressMigrator.php