Найти и заменить во всей базе данных mysql
Я хотел бы сделать поиск и замену внутри всей базы данных не просто стол.
Как я могу изменить сценарий, чтобы работать?
update [table_name] set [field_name] = заменить([имя_поля],'[string_to_find]','[string_to_replace]');
Я просто использую Астерикс?
update * set [field_name] = заменить([имя_поля],'[string_to_find]','[string_to_replace]');
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')
очень полезный веб-инструмент, написанный на PHP, который позволяет легко искать и заменять текстовые строки в базе данных MySQL.
будьте осторожны, при замене с помощью команды заменить!
почему?
потому что существует большая вероятность того, что ваша база данных содержит сериализованные данные (особенно wp_options таблица), поэтому использование только "заменить" может нарушить данные.
использовать рекомендуемую сериализацию: https://www.protectpages.com/tools/WordpressMigrator
если вы находитесь в phpMyAdmin и у вас есть только минимальные изменения, вы можете сделать это простым способом.
- войдите в свой phpMyAdmin
- выберите базу данных, необходимую для выполнения изменений
нажмите на опцию поиска
вы всегда можете выбрать либо все таблицы или любой. Не забудьте указать ключевое слово поиска, оно будет использоваться как подстановочный знак.)%(
- теперь нажмите на Go.
- это даст вам все таблицы, которые имеют элемент искать.
теперь вы можете открыть каждую таблицу по одному и выполнить обновление Созданный пример запроса может выглядеть следующим образом.
ВЫБЕРИТЕ * ИЗ
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%')
Я просто хотел поделиться, как я сделал это найти/заменить вещь с базой данных sql, потому что мне нужно было заменить ссылки из файла БД Sessionbuddy Chrome.
- поэтому я экспортировал файл базы данных sql как .txt файл с помощью SQLite Браузер баз данных 2.0 b1
- найти / заменить в блокноте++
- импортировать .txt файл обратно на SQLite Database Browser 2.0 b1