Найти и заменить текст во всей таблице с помощью запроса MySQL

Обычно я использую ручной поиск для замены текста в базе данных MySQL с помощью phpmyadmin. Я устал от этого сейчас, как я могу запустить запрос, чтобы найти и заменить текст новым текстом во всей таблице в phpmyadmin?

Пример: найдите ключевое слово domain.com , замените его на www.domain.com .

Для single table обновления single table

  UPDATE `table_name` SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text') 

Из multiple tables

Если вы хотите редактировать из всех таблиц, лучший способ – взять dump а затем find/replace и загрузить его обратно.

Самый простой способ, который я нашел, – сбросить базу данных в текстовый файл, запустить команду sed для замены и перезагрузить базу данных обратно в MySQL.

Все команды bash на Linux, из памяти.

Дамп базы данных в текстовый файл

 mysqldump -u user -p databasename > ./db.sql 

Выполнить команду sed для поиска / замены целевой строки

 sed -i 's/oldString/newString/g' ./db.sql 

Перезагрузить базу данных в MySQL

 mysql -u user -p databasename < ./db.sql 

Очень просто.

Поместите это в php-файл и запустите его, и он должен делать то, что вы хотите.

 // Connect to your MySQL database. $hostname = "localhost"; $username = "db_username"; $password = "db_password"; $database = "db_name"; mysql_connect($hostname, $username, $password); // The find and replace strings. $find = "find_this_text"; $replace = "replace_with_this_text"; $loop = mysql_query(" SELECT concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s FROM information_schema.columns WHERE table_schema = '{$database}'") or die ('Cant loop through dbfields: ' . mysql_error()); while ($query = mysql_fetch_assoc($loop)) { mysql_query($query['s']); } 

Запуск SQL-запроса в PHPmyadmin для поиска и замены текста во всех сообщениях блога WordPress, таких как поиск mysite.com/wordpress и замена его таблицей mysite.com/news в этом примере: tj_posts

 UPDATE `tj_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news') 
  UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required); 

Например, если я хочу заменить все вхождения Джона Марком, я буду использовать ниже,

 UPDATE student SET student_name = replace(student_name, 'John', 'Mark'); 

Другой вариант – генерировать операторы для каждого столбца в базе данных:

 SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');' ) AS statement FROM information_schema.columns WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%'; 

Это должно сгенерировать список операторов обновления, которые вы можете выполнить.

Я считаю, что «swapnesh» отвечает, чтобы быть лучшим! К сожалению, я не смог выполнить его в phpMyAdmin (4.5.0.2), который, хотя и нелогичен (и пробовал несколько вещей), продолжал говорить, что было найдено новое утверждение и что никакой разделитель не найден …

Таким образом, я пришел со следующим решением, которое может быть полезно, если вы изучите ту же проблему и не имеете другого доступа к базе данных, чем PMA …

 UPDATE `wp_posts` AS `toUpdate`, (SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated` SET `toUpdate`.`guid`=`updated`.`guid` WHERE `toUpdate`.`ID`=`updated`.`ID`; 

Чтобы проверить ожидаемый результат, вы можете использовать:

 SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid` FROM `wp_posts` AS `toUpdate`, (SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated` WHERE `toUpdate`.`ID`=`updated`.`ID`; 

Генерировать SQL-запросы изменений (FAST)

mysql -e “SELECT CONCAT (‘update’, table_name, ‘set’, column_name, ‘= replace (‘, column_name, ‘,’ ‘www.oldsite.com’ ‘,’ ‘www.newsite.com’ ‘); ‘) AS statement FROM information_schema.columns WHERE table_name LIKE’ wp_% ‘”-u root -p your_db_name_here> upgrade_script.sql

Удалите мусор в начале файла. У меня были некоторые.

nano upgrade_script.sql

Запустите сгенерированный скрипт с параметрами –force, чтобы пропустить ошибки. (SLOW – хватайте кофе, если большая БД)

mysql -u root -p your_db_name_here –force

  • Как отображать символы UTF-8 в phpMyAdmin?
  • ERROR 2002 (HY000): невозможно подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)
  • Как настроить сеанс пользователя phpmyadmin так быстро, чтобы не выходить из него?
  • PHPMyAdmin Default login password
  • phpMyAdmin - не удается подключиться - недействительные настройки - с тех пор, как я добавил пароль с правами root
  • где MySQL хранит файлы базы данных?
  • Ошибка? # 1146 - Таблица "xxx.xxxxx" не существует
  • Восстановить структуру таблицы из файлов frm и ibd
  • Есть ли простой способ преобразования данных MySQL в Title Case?
  • Как написать SP в phpMyAdmin (MySQL)?
  • MySQL Server ушел при импорте большого файла sql
  • Давайте будем гением компьютера.