Найти и заменить всю базу данных 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. Я использовал их в прошлом, и они отлично поработали в сценариях сложной замены и без необходимости экспортировать данные из базы данных для поиска и замены.