Найти и заменить всю базу данных MySQL

Я хотел бы найти и заменить внутри всей базы данных, а не только таблицы.

Как я могу изменить скрипт ниже, чтобы работать?

 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]');

Ответ 1

sqldump в текстовый файл, найти/заменить, повторно импортировать sqldump.

Дамп базы данных в текстовый файл
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

Восстановить базу данных после внесения в нее изменений.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql

Ответ 2

Обновить старый 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_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Ответ 3

Это сильно означает, что ваши данные НЕ НОРМАЛИЗИРОВАНЫ для начала.

Что-то вроде этого должно работать (NB, вы не упомянули о том, что используете какие-либо другие языки, поэтому он написан как хранимая процедура 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.

Ответ 4

Короткий ответ: вы не можете.

Длинный ответ: вы можете использовать INFORMATION_SCHEMA, чтобы получить определения таблиц и использовать их для генерации необходимых операторов UPDATE динамически. Например, вы можете начать с этого:

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema'

Я постараюсь не делать этого, если это вообще возможно.

Ответ 5

БУДЬТЕ ОСТОРОЖНЫ при замене командой REPLACE!

Почему?

потому что есть большая вероятность, что ваша база данных содержит сериализованные данные (особенно таблицу wp_options), поэтому использование только "замены" может привести к повреждению данных.

Используйте рекомендованную сериализацию: https://puvox.software/tools/wordpress-migrator

Ответ 6

Инструмент поиска и замены MySQL

Очень полезный веб-инструмент, написанный на PHP, который позволяет легко искать и заменять текстовые строки в базе данных MySQL.

Ответ 7

Это невозможно - вам нужно выполнить ОБНОВЛЕНИЕ для каждой таблицы отдельно.

ПРЕДУПРЕЖДЕНИЕ: ДУБИРУЮЩИЙ, НО ЭТО РАБОТАЕТ (ВЕРОЯТНО) РЕШЕНИЕ ПОСЛЕДУЕТ

В качестве альтернативы вы можете сбросить базу данных с помощью mysqldump и просто выполнить поиск/замену в результирующем файле SQL. (Я бы рекомендовал отключить все, что может касаться базы данных, пока это выполняется, а также использовать флаги -add-drop-table и -extended-insert.) Однако вам нужно быть уверенным, что поиск/замена текста не изменит ничего, кроме самих данных (т.е. что текст, который вы собираетесь менять, может не произойти как часть синтаксиса SQL) и Я бы действительно попытался сделать re сначала в пустой тестовой базе данных.)

Ответ 8

Простое Soltion

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

Ответ 9

Если вы находитесь в phpMyAdmin, и у вас есть только минимальное изменение, вы можете сделать это простым способом.

  • Войдите в свой phpMyAdmin
  • Выберите базу данных, необходимую для выполнения изменений.
  • Нажмите кнопку поиска

    введите описание изображения здесь

Вы всегда можете выбрать либо все таблицы, либо любые. Не забудьте указать ключевое слово поиска, оно будет использоваться в качестве шаблона (%).

  • Теперь нажмите "Перейти".
  • Это даст вам все таблицы, у которых есть элемент, который у вас есть. Поиск.

введите описание изображения здесь

  • Теперь вы можете открывать каждую таблицу один за другим и выполнять обновление Образец запроса может выглядеть следующим образом.

    SELECT * FROM sibeecst_passion. wp_ewwwio_images ГДЕ (CONVERT (id ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (path ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (image_md5 ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (results ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (gallery ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (image_size ИСПОЛЬЗОВАНИЕ utf8) LIKE ' % sibee% 'ИЛИ CONVERT (orig_size ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (updates ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (updated ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (trace ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (attachment_id ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (resize ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (converted ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (level ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (pending ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ ​​CONVERT (backup ИСПОЛЬЗОВАНИЕ utf8) LIKE ' % sibee% ')

Ответ 10

Я просто хотел поделиться тем, как я это нашел/заменил вещь с помощью базы данных sql, потому что мне нужно было заменить ссылки из файла session session.db Chrome.

  • Итак, я экспортировал файл базы данных sql в формате .txt с помощью SQLite Браузер базы данных 2.0 b1
  • Найти/заменить в блокноте ++
  • Импортирован. TXT файл обратно в SQLite Database Browser 2.0 b1

Ответ 11

Другой вариант (в зависимости от варианта использования) заключается в использовании DataMystic TextPipe и DataPipe. Я использовал их в прошлом, и они отлично поработали в сценариях сложной замены и без необходимости экспортировать данные из базы данных для поиска и замены.