php очистить таблицу mysql
DELETE. Удаление записей в таблице базы данных MySQL
Команда DELETE
Синтаксис запроса на удаление записи.
Будьте предельно внимательны при выполнении запросов на удаление записей! Если вы не укажите команду WHERE и последующее условие, то будут удалены все записи в таблице.
Удаление нескольких записей таблицы
Для примера удалим несколько записей из таблицы books, которая хранится в базе данных Bookstore.
Оповестим сервер MySQL о базе данных, для которой будут выполнятся запросы.
Далее выведем записи таблицы books с идентификаторами с 1 по 5.
mysql> SELECT id, title, author, price, discount FROM books WHERE id BETWEEN 1 AND 5;
+—-+————————+——————————+———+———-+
| id | title | author | price | discount |
+—-+————————+——————————+———+———-+
| 1 | Капитанская дочка | А.С.Пушкин | 151.20 | 0 |
| 2 | Мертвые души | Н.В.Гоголь | 141.00 | 0 |
| 3 | Анна Каренина | Л.Н.Толстой | 135.00 | 20 |
| 4 | Бесы | Ф.М.Достоевский | 122.00 | 0 |
| 5 | Нос | Н.В.Гоголь | 105.00 | 0 |
+—-+————————+——————————+———+———-+
5 rows in set (0.00 sec)
Допустим необходимо удалить все записи с книгами за авторством Н.В.Гоголя. Запрос на удаление и его результат будет выглядеть следующим образом.
mysql> DELETE FROM books WHERE author= ‘Н.В.Гоголь’ ;
Query OK, 2 rows affected (0.00 sec)
Удаление всех записей таблицы
Если вам нужно очистить всю таблицу от имеющихся в ней данных, то просто выполните команду DELETE без каких либо условий.
Следующая команда удалит все записи в таблице books.
Как очистить таблицу в MySQL
В статье мы расскажем, как в MySQL очистить таблицу. Мы покажем два способа и объясним разницу между ними.
Очистить таблицу можно при помощи одной из команд:
Разница между TRUNCATE и DELETE
Команда TRUNCATE является оператором DDL. DDL (Data Definition Language) — это язык определения данных. Операторы языка DDL управляют объектами баз данных: удаляют, создают или переименовывают объекты БД.
Команда DELETE является DML-оператором. DML (Data Manipulation Language) — это язык манипуляции данными. Операторы языка DML позволяют вставить, удалить, изменить, извлечь или обновить данные в базе.
Сравним работу команд:
TRUNCATE | DELETE |
---|---|
Удаляет все данные из таблицы | Может удалить часть данных в соответствии с условием WHERE |
Удаляет все строки из таблицы освобождением страниц | Удаляет строки по одной |
Записывает в журнал транзакций сведения о каждой удалённой странице, а не строке | Делает запись в журнал транзакций при удалении каждой строки |
Работает быстрее | Работает медленнее |
Нужны привилегии ALTER | Нужны привилегии DELETE |
Сбрасывает идентификаторы | Не сбрасывает идентификаторы |
Блокирует таблицу и страницу перед удалением | Блокирует строку перед её удалением |
Выбор команды зависит от конкретного случая. Если нужно удалить некоторые строки по условию, подойдёт только DELETE. Если нужно полностью очистить таблицу и сбросить идентификаторы, используйте TRUNCATE.
Понять разницу между командами и определиться с их выбором поможет таблица с операторами каждого языка:
DDL | DML |
---|---|
CREATE | SELECT |
ALTER | INSERT |
DROP | UPDATE |
TRUNCATE | DELETE |
COMMENT | MERGE |
RENAME | CALL |
EXPLAIN PLAN | |
LOCK TABLE |
Таким образом, операторы DDL управляют структурой, а операторы DML — её содержимым.
Как в MySQL очистить таблицу
Подключитесь к серверу по SSH. Затем подключитесь к MySQL при помощи команды:
Вместо username введите имя пользователя, вместо password — пароль.
Если вы не знаете пароль, попробуйте войти без него при помощи команды:
Если подключение без пароля не настроено, возникнет ошибка:
В этом случае сбросьте пароль от root-пользователя MySQL по инструкции.
TRUNCATE
TRUNCATE полностью очищает таблицу без возможности указать дополнительные условия. Для этого:
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
TRUNCATE позволяет указать название БД и название таблицы в одном запросе. Для этого используйте команду:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу.
DELETE
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
Вы можете указать название БД и таблицы в одном запросе:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу при помощи DELETE.
DELETE позволяет использовать условие WHERE, чтобы удалить некоторые строки из таблицы:
DELETE FROM table_name WHERE condition;
Где condition — это условие.
Пример команды, в котором будут удалены все строки, значение столбца, id которых больше 1000:
DELETE FROM table_name WHERE id > 1000;
Как проверить содержимое таблицы
Если вы хотите убедиться, что в таблице не осталось данных, воспользуйтесь командой:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Если таблица пустая, вывод будет следующим:
Генеральная уборка продолжается: как почистить базу MySQL
Дата публикации: 2016-07-20
От автора: вы думаете, что везде убрали? Дом вычистили, машину помыли, детей до блеска «выдраили». А на своем сервере СУБД забыли прибраться! Не умеете? Это не страшно! Сейчас я научу вас, как почистить базу MySQL.
Зачем убирать?
Чтобы не было мусора и пыли. В случае с базами данных имеется в виду «цифровой» мусор. Если ваш ресурс работает на основе CMS, то даже в этом случае в таблицах остаются различные «ошметки» после работы плагинов, системы движка. Ну, может и вы где-то тоже строку «забыли». Постепенно вся эта «пыль» скапливается в огромные пласты, которые затем негативно влияют на быстродействие всего ресурса. А это негативно отражается на юзабилити сайта. В общем, чистить все равно надо и придется.
Кроме этого «выросшая» как на дрожжах база может занимать много виртуального дискового пространства, в результате чего хостер начнет нервничать и заваливать вас сообщении о превышении лимита. Если ничего не предпримите (не перейдете на дорогостоящий тариф, в котором предоставляются большие «площади» под сайт), то он просто «выдернет из розетки» ваш ресурс. Поэтому лучше научиться, как почистить базу данных MySQL, чем тратиться на новый тарифный план или переезд на «новые рельсы».
Также иногда требуется удалить только содержимое таблицы, и сберечь ее структуру. Все это мы рассмотрим в сегодняшнем материале, посвященном правильной уборке на СУБД. Стартуем!
Очищаем таблицу
Часто требуется не удалять таблицу, а лишь очистить ее от всех строк, но при этом сохранить всю ее структуру: типы данных столбцов, индексы, первичные ключи и другие ее параметры. Конечно, можно всегда удалить таблицу целиком с помощью команды DROP TABLTE, но затем придется создавать ее и прописывать все атрибуты заново. А это не совсем удобно, поэтому в MySQL для удаления строк таблицы есть специальная команда. Ее синтаксис:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Как быстро удалить множество строк из большой базы в MySQL
Как известно, все системные администраторы делятся на две категории. Те, кто уже делают бэкапы и те, кто ещё нет.
Подобно им, администраторы БД также делятся на две категории, те, кто уже запускал процедуру удаления на большой БД с типом таблиц InnoDB, и те, кому это ещё предстоит.
Разумеется, в теории все знают, что из-за особенностей InnoDB, удаление может быть долгим, но это знание сродни тому, что «надо делать бэкапы». Многие осознают эти нехитрые истины, только наступив на грабли.
Для понимания, удаление 350М записей в таблице на 500М записей может занять более двух суток. Вторые грабли, на которые многие наступают, это попытка прибить запрос. Как мы все помним, InnoDB движок транзакционный, поэтому если вы попытаетесь прибить запрос, он попытается откатить изменения, а это может занять больше времени, чем выполнялся запрос.
Как сделать так, чтобы не было мучительно больно? Добро пожаловать под кат!
1. Если вы УЖЕ запустили удаление и теперь хотите приблизительно оценить, сколько уже сделано и сколько ещё осталось, используйте SHOW ENGINE INNODB STATUS; Получите длинный вывод. Ищите в нём вашу команду и смотрите undo log entries, это и будет количество уже обработанных записей.
Далее, в зависимости от того, сколько уже сделано, решаете, ждать до победного конца или прерывать запрос.
2. Если вы только планируете начать удаление, используйте LIMIT.
Количество записей подбирается эмпирически, скажем на не особо мощном сервере я использовал LIMIT 5000, на более мощном LIMIT 50000. Начните с небольших значений и увеличивайте их по необходимости.
а) надо руками запустить запрос необходимое количество раз (ну, или сделать текстовый файл с необходимым количеством строк с запросом и запускать из него.
б) каждый последующий запрос выполняется дольше, чем предыдущий
3. Используйте pt-archiver из комплекта percona-tools.
Я бы рекомендовал именно этот способ по ряду причин:
а) он быстрый;
б) его можно прервать в любой момент;
в) в нём можно наблюдать за прогрессом операции.
В принципе, ключи довольно очевидны, тем не менее, пройдусь по ним:
—source — описывает подключение. Хост, база и таблица. При необходимости можно дописать логин и пароль (в примере я использую креды из
Надеюсь, эта небольшая заметка показалась вам полезной (или хотя бы интересной).
Если вам есть, что добавить, поправить или просто высказаться — пишите!
Отдельной строкой хочу принести благодарность жж-пользователю merkwurdig, поднявшему обсуждение этой проблемы и заставившему меня вспомнить, как я бегал по таким же граблям, жж-пользовательнице svetasmirnova, которая всегда приходит на помощь при затруднениях с MySQL и сообществу ru_root, благодаря которому и появилась эта небольшая статья.
Как удалить все записи в таблице в phpMyAdmin
В phpMyAdmin если вы хотите удалить запись, то вы можете нажать кнопку «Удалить» напротив ненужной строки или выбрать несколько строк и нажать кнопку «Удалить» внизу таблицы.
Если вам нужно удалить все строки и вы попробовали нажать «Отметить все», а затем кнопку «Удалить», то удалены будут только строки на странице. Страниц может быть много — зависит от количества записей и того, сколько строк показано на странице (от 25 до 500). Если страниц несколько, то кнопка «Отметить все» не отмечает записи на других страницах.
Чтобы полностью очистить таблицу от всех строк, выберите базу данных, где находится таблица, которую вы хотите очистить. Затем перейдите на вкладку «Структура» и нажмите кнопку «Очистить».
Если этот вариант вам не подходит по какой-либо причине, то вы можете сделать очистку с помощью SQL запроса. Для этого, соответственно, перейдите на вкладку «SQL».
У вас на выбор есть две команды delete и truncate.
Это приведёт к удалению всего содержимого таблицы, без сброса идентификатора автоматического увеличения, этот процесс очень медленный. Если вы хотите удалить определённые записи, добавьте в конце запроса where.
Это сбросит таблицу, т.е. все поля с автоматическим приращением будут сброшены. Это DDL и очень быстро. Вы не можете удалить какую-либо конкретную запись с помощью truncate.
Например, на моём хостинге при попытке использовать delete я получил сообщение, что данная команда запрещена, но команда truncate прекрасно сработала.
«truncate ИМЯ-ТАБЛИЦЫ» завершится ошибкой для таблицы с определенным ограничением ключа. Он также не будет переиндексировать значение таблицы AUTO_INCREMENT. Вместо этого удалите все записи таблицы и сбросьте индексирование до 1, используя этот синтаксис sql:
Также помните, что у вас не должно быть никаких отношений с другой таблицей. Если в таблице будет какое-либо ограничение внешнего ключа, эта запись не будет удалена и выдаст ошибку.