Найти и заменить во всей базе данных mysql


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

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

update [table_name] set [field_name] = заменить([имя_поля],'[string_to_find]','[string_to_replace]');

Я просто использую Астерикс?

update * set [field_name] = заменить([имя_поля],'[string_to_find]','[string_to_replace]');

11 51

11 ответов:

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

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

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

обновить старый URL на новый URL в word-нажмите 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');

это сильно подразумевает, что ваши данные не нормализованы для начала. Вы действительно должны это исправить.

Somteh=такая вещь должна работать (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 - я сделал достаточно свободного программирования здесь.

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

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

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

Я бы попытался избежать этого, хотя, если это вообще возможно.

Это невозможно - вам нужно выполнить обновление для каждой таблицы отдельно.

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

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

Простое Решение

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

MySQL Search & Replace Tool

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

будьте осторожны, при замене с помощью команды заменить!

почему?

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

использовать рекомендуемую сериализацию: https://www.protectpages.com/tools/WordpressMigrator

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

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

    enter image description here

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

  • теперь нажмите на Go.
  • это даст вам все таблицы, которые имеют элемент искать.

enter image description here

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

    ВЫБЕРИТЕ * ИЗ sibeecst_passion.wp_ewwwio_images ГДЕ (КОНВЕРТИРОВАТЬ (id С помощью utf8), как "%sibee% " или конвертировать (path используя utf8) как "%sibee% " или конвертировать (image_md5 С помощью utf8), как "%sibee% " или конвертировать (results С помощью utf8), как "%sibee% " или конвертировать (gallery С помощью utf8), как "%sibee% " или конвертировать (image_size С помощью utf8), как "%sibee% " или конвертировать (orig_size С помощью utf8), как "%sibee% " или конвертировать (updates С помощью utf8), как "%sibee% " или конвертировать (updated С помощью utf8), как "%sibee% " или конвертировать (trace С помощью utf8), как "%sibee% " или конвертировать (attachment_id С помощью utf8), как "%sibee% " или конвертировать (resize используя utf8) как "%sibee% " или Конвертировать (converted С помощью utf8), как "%sibee% " или конвертировать (level С помощью utf8), как "%sibee% " или конвертировать (pending С помощью utf8), как "%sibee% " или конвертировать (backup используя utf8) как ' %sibee%')

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

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

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