Перейти к содержимому

Массовая замена текста в MySQL

Если встала необходимость заменить какой-либо текст в таблице MySQL, это можно сделать очень просто

1 Способ

UPDATE `table` SET `column` = REPLACE( column, 'search', 'replace' );

В этом коде заменяем table на название таблицы, column на название колонки, search — искомый текст, replace — текст, на который будем замещать.
Так же в запрос можно добавить какое-либо условие WHERE.

2 Способ

Сделать дамп базы, сделать реплейс любой программой, например внутренним редактором менеджера Far или Notepad++, а потом залить базу обратно… Для безопасно быстрого бэкапа и восстановления базы рекомендую использовать Sypex Dumper бесплатную версию.

И полный синтаксис команды REPLACE

  REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name [(col_name,...)]
        VALUES (expression,...),(...),...
или REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name [(col_name,...)]
        SELECT ...
или REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name
        SET col_name=expression, col_name=expression,...

Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена.

Другими словами, команда REPLACE не предоставляет доступа к замещаемой записи. В некоторых старых версиях MySQL такой доступ иногда оказывался возможным, но это был дефект, который уже исправлен.

Для использования REPLACE у вас должны быть привилегии INSERT и DELETE для таблицы.

При использовании команды REPLACE функция mysql_affected_rows() вернет значение, равное 2, если старая строка была заменена новой. Объясняется это тем, что в таблицу вставляется строка после того, как удаляется дубликат.

Это позволяет легко определять, какое действие произвела команда REPLACE — добавление или замещение строки. Достаточно просто проверить, какое число вернула функция mysql_affected_rows() — 1 (строка добавлена) или 2 (замещена).

Следует учитывать, что, если не используются индексы UNIQUE или PRIMARY KEY, то применение команды REPLACE не имеет смысла, так как она работает просто как INSERT.

Опубликовано вMysql

комментариев 12

  1. neocartez neocartez

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

  2. gvmir gvmir

    Вы мне очень помогли, спасибо. Язык структурированных запросов на самом деле не сложный, но если не знаешь его вообще, и с чего начинать, то без вот такой помощи ну никак. Еще раз большое спасибо!!!!!!!!!!!!!!!!!!

  3. gvmir gvmir

    Ще раз велике дякую, дуже допомогли, не запам’ятав код с першого разу, дуже багато інформації при створенні сайту потрібно переварити, а роблю все сам, від дизайну та HTML-весртки до РНР та MySQL обробки даних, тож ваша публікація досить таки актуальна, ще раз красно дякую!!!!

  4. илька илька

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

  5. Никита Никита

    Полезная статья, спасибо, очень помогла в замене текста на массе страниц.

    to Женя
    В SQL не силён, но там по-моему отдельные команды для удаления таблиц и строк. Для таблиц вроде drop table, для отдельных записей delete from имя таблицы, дальше что писать уже не помню. В тоже время, никто не мешает использовать озвученные в этой статье методы, просто чем заменять оставить пустым, по идее, должно будет именно удалить нужные записи в базе, но это в теории, на практике не проверял, только замену текста попробовал, помогло.

  6. Евгений Евгений

    Затронуто 1018067 строк. (Запрос занял 13.9876 сек.)
    Благодарю вас, сэр!

Добавить комментарий для илька Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *