Как очистить таблицу в MySQL
В статье мы расскажем, как в MySQL очистить таблицу. Мы покажем два способа и объясним разницу между ними.
Очистить таблицу можно при помощи одной из команд:
- TRUNCATE,
- DELETE.
Разница между 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 при помощи команды:
mysql -u username -p’password’
Вместо username введите имя пользователя, вместо password — пароль.
Если вы не знаете пароль, попробуйте войти без него при помощи команды:
Если подключение без пароля не настроено, возникнет ошибка:
В этом случае сбросьте пароль от root-пользователя MySQL по инструкции.
TRUNCATE
TRUNCATE полностью очищает таблицу без возможности указать дополнительные условия. Для этого:
- 1.
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;
Вместо db_name введите имя базы данных.
- 2.
Очистите таблицу при помощи команды:
TRUNCATE table_name;
TRUNCATE позволяет указать название БД и название таблицы в одном запросе. Для этого используйте команду:
TRUNCATE db_name.table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу.
DELETE
- 1.
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
USE db_name;
Вместо db_name введите имя базы данных.
- 2.
Очистите таблицу при помощи команды:
DELETE FROM table_name;
Вы можете указать название БД и таблицы в одном запросе:
DELETE FROM db_name.table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу при помощи DELETE.
Совет
DELETE позволяет использовать условие WHERE, чтобы удалить некоторые строки из таблицы:
DELETE FROM table_name WHERE condition;
Где condition — это условие.
Пример команды, в котором будут удалены все строки, значение столбца, id которых больше 1000:
DELETE FROM table_name WHERE id > 1000;
Как проверить содержимое таблицы
SELECT * FROM db_name. table_name;
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Если таблица пустая, вывод будет следующим:
Помогла ли вам статья?
Да
раз уже
помогла
truncate table
ГЛАВА 7 Команды
Описание | Удаляет все строки из таблицы. |
Синтаксис | truncate table [[база_данных.]владелец.]имя_таблицы |
Параметры | имя_таблицы |
| Имя очищаемой таблицы. Если таблица расположена в другой базе |
| данных, то должно быть указано имя базы данных. Если в базе данных |
| существуют несколько таблиц с тем же именем, то должно быть задано |
| имя владельца. По умолчанию владелец – это текущий пользователь, |
| а база_данных – текущая база данных. |
Примеры | Удаление всех данных из таблицы authors: |
| truncate table authors |
Использование | • Команда truncate table удаляет все строки из таблицы. Структура таб- |
| лицы и все индексы сохраняются, пока не будет выполнена команда |
| drop table. Правила, значения по умолчанию и ограничения, связан- |
| ные со столбцами, остаются связанными, а триггеры продолжают |
| действовать. |
| • Сервер Adaptive Server больше не использует страницы данных |
| о распределении; теперь статистическая информация хранится |
| в таблицах sysstatistics и systabstats. |
| При выполнении команды truncate table статистическая информация |
| больше не удаляется, так что теперь не нужно выполнять команду |
| update statistics после добавления данных. |
| Команда truncate table не удаляет статистическую информацию |
| для таблицы. |
| • Команда truncate table – более быстрый эквивалент команды delete без |
| инструкции where. Команда delete удаляет строки по одной и каждую |
| операцию удаления строки регистрирует в журнале как транзакцию; |
| команда truncate table освобождает целые страницы данных и делает |
| меньше записей в журнале. Обе команды (и delete, и truncate table) |
| делают пространство, которое было занято удаляемыми данными |
| и связанными с ними индексами, доступным для последующего |
| использования. |
| • Поскольку операции удаления отдельных строк не записываются |
| в журнал, команда truncate table не может вызывать срабатывание |
| триггера. |
739
truncate table
• Нельзя выполнять команду truncate table, если другая таблица содер- жит строки, ссылающиеся на очищаемую таблицу. Сначала необхо- димо удалить эти строки из внешней таблицы или очистить ее коман- дой truncate, а затем очистить первичную таблицу.
• Нельзя применять команду truncate table к секционированной табли- це. Сначала необходимо преобразовать ее в таблицу без секций с помощью инструкции unpartition команды alter table, а затем выпол-
нить команду truncate table.
| Чтобы удалить все строки из секционированной таблицы без предва- |
| рительной отмены ее секционирования, можно использовать коман- |
| ду delete без инструкции where. Эта команда, как правило, выполня- |
| ется медленнее команды truncate table, поскольку она удаляет строки |
| по одной и каждую операцию delete регистрирует в журнале. |
Стандарты | Уровень соответствия стандарту SQL92: совместимость с базовым |
| уровнем. |
Полномочия | Команду create existing table по умолчанию может выполнять владелец |
| таблицы. Это полномочие не может быть передано другим пользова- |
| телям. Чтобы иметь возможность очищать таблицы системного аудита |
| (sysaudits_01, sysaudits_02, sysaudits_03 и т.д. до sysaudits_08), необходи- |
| мо быть администратором безопасности. |
См. также | Команды create trigger, delete, drop table |
740
| ГЛАВА 7 Команды |
|
|
| |
Описание | Возвращает единый набор результатов, объединяющий результаты двух |
| или более запросов. Повторяющиеся строки исключаются из набора |
| результатов, если не указано ключевое слово all. |
Синтаксис | select список_выборки [into инструкция] |
| [from инструкция] [where инструкция] |
| [group by инструкция] [havingинструкция] |
| [union [all] |
| select список_выборки |
| [from инструкция] [where инструкция] |
| [group by инструкция] [having инструкция] ]… |
| [order by инструкция] |
| [order by инструкция] |
Параметры | union |
| Создает объединение результирующих наборов двух операторов select. |
| all |
| Включает все строки в результаты, не удаляя повторяющиеся строки. |
| into |
| Создает новую таблицу на основе столбцов, указанных в списке вы- |
| борки, и строк, выбранных инструкцией where. В операторе объеди- |
| нения только первый запрос может содержать инструкцию into. |
Примеры | Пример 1. Результирующий набор включает содержимое столбцов stor_id |
| и stor_name таблиц sales и sales_east: |
| select stor_id, stor_name from sales |
| union |
| select stor_id, stor_name from sales_east |
| Пример 2. Инструкция into в первом запросе указывает, что в таблицу |
| results должен быть помещен окончательный набор результатов, |
| полученный в результате объединения указанных столбцов таблиц |
| publishers, stores и stores_east: |
| select pub_id, pub_name, city into results |
| from publishers |
| union |
| select stor_id, stor_name, city from stores |
| union |
| select stor_id, stor_name, city from stores_east |
741
union
Пример 3. Сначала создается объединение указанных столбцов таблиц sales и sales_east. Затем эти результаты объединяются с данными из таблицы publishers. Наконец, этот результат объединяется с данными из таблицы authors:
| select au_lname, city, state from authors |
| union |
| ((select stor_name, city, state from sales |
| union |
| select stor_name, city, state from sales_east) |
| union |
| select pub_name, city, state from publishers) |
Использование | • Общее количество таблиц, указанных во всех частях запроса с |
| оператором union, не должно превышать 256. |
| • Оператор union можно использовать в команде select, например: |
| create view |
| select * from Jan1998Sales |
| union all |
| select * from Feb1998Sales |
| union all |
| • Инструкции order by и compute разрешены только в конце оператора |
| union для упорядочения конечных результатов или вычисления |
| итоговых значений. |
| • Инструкции group by и having могут использоваться только внутри |
| индивидуальных запросов; их нельзя применять для группирования |
| или фильтрации конечного набора результатов. |
| • По умолчанию оператор SQL, содержащий операторы union, |
| обрабатывается слева направо. |
| • Поскольку union – бинарная операция, выражения с более чем двумя |
| запросами должны заключаться в круглые скобки для указания |
| порядка обработки. |
| • Первый запрос в операторе union может содержать инструкцию into, |
| которая создает таблицу, в которую будет помещен окончательный |
| набор результатов. Оператор into должен быть в первом запросе. |
| Если он указан в каком-либо другом запросе, то будет выдано |
| сообщение об ошибке (см. пример 2). |
| • Оператор union можно использовать внутри оператора insert…select, |
| например: |
742
ГЛАВА 7 Команды
insert into sales.overall select * from sales union
select * from sales_east
•Все списки выборки в операторе SQL должны иметь одинаковое количество выражений (имен столбцов, арифметических выражений, агрегатных функций и т.п.). Например, следующий оператор недопустим, потому что первый список выборки содержит больше выражений, чем второй:
/* Пример неправильной команды—списки выборки */ /* несовместимы */
select au_id, title_id, au_ord from titleauthor union
select stor_id, date from sales
•Соответствующие столбцы в списках выборки команд union должны располагаться в одном и том же порядке, поскольку union сравнивает столбцы по одному в порядке, указанном в индивидуальных запро- сах.
•Имена столбцов в таблице, полученной в результате выполнения оператора union, берутся из первого индивидуального запроса. Если необходимо определить новый заголовок столбца для результирую- щего набора, то это должно быть сделано в первом запросе. Ссы- латься на столбец результирующего набора по новому имени (напри- мер в инструкции order by) можно, только если ссылка на это имя была в первом операторе select. Например, следующий запрос корректен:
select Cities = city from stores union
select city from stores_east order by Cities
•Описания столбцов, которые являются частью операции union, необязательно должны быть идентичными. В таблице 7-36 приведены правила относительно типов данных и определений соответствующих друг другу столбцов в индивидуальных запросах.
Таблица 7-36. Результирующие типы данных в операциях union
Типы данных столбцов в | Тип данных соответствующего столбца в |
индивидуальных запросах | таблице, полученной в результате операции |
| union |
|
|
Несовместимые типы данных (Adaptive Server | Adaptive Server возвращает ошибку. |
не преобразует типы данных неявным образом). |
|
|
|
743
union
Типы данных столбцов в | Тип данных соответствующего столбца в |
индивидуальных запросах | таблице, полученной в результате операции |
| union |
|
|
Оба – символьные типы фиксированной | Символьный тип фиксированной длины, равной |
длины (длина первого – L1, а второго – L2). | большему из двух значений L1 и L2. |
|
|
Оба – двоичные типы фиксированной длины | Двоичный тип фиксированной длины, равной большему |
L1 и L2. | из двух значений L1 и L2. |
|
|
Один или оба – символьные типы переменной | Символьный тип переменной длины, равной максималь- |
длины. | ной из длин столбцов в индивидуальных запросах. |
|
|
Один или оба – двоичные типы переменной | Двоичный тип переменной длины, равной максимальной |
длины. | из длин столбцов в индивидуальных запросах. |
|
|
Оба – числовые типы (например smallint, int, | Тип данных с точностью, равной большей из двух точнос- |
float, money). | тей входных столбцов. Например, если столбец в таблице |
| A имеет тип int, а соответствующий столбец в таблице B – |
| тип float, то столбец в результирующей таблице будет |
| иметь тип float, т. к. тип float имеет более высокую точ- |
| ность, чем int. |
|
|
Оба столбца не допускают значений NULL. | Не допускает значения NULL. |
|
|
| Ограничения |
| • Оператор union нельзя использовать в подзапросах. |
| • Оператор union нельзя использовать с инструкцией for browse. |
| • Оператор union нельзя использовать в запросах, которые выбирают |
| данные типа text или image. |
Стандарты | Уровень соответствия стандарту SQL92: совместимость с базовым |
| уровнем. |
| Ниже приведен список расширений TransactSQL: |
| • использование оператора union в инструкции select команды insert; |
| • указание новых заголовков столбцов в инструкции order by команды |
| select, содержащей оператор union. |
См. также | Команды compute, declare, group by и having, order by, select, where |
| Функции convert |
744
SQL TRUNCATE() | Изучите примеры оператора TRUNCATE TABLE
TRUNCATE на стандартном языке запросов (SQL) — это оператор языка определения данных (DDL), который используется для удаления полных данных из таблицы базы данных без удаления самой таблицы. Он освобождает место или освобождает место в таблице. Однако следует отметить, что операторы TRUNCATE TABLE могут не иметь возможности отката во многих базах данных SQL. Также являясь оператором DDL, табличный оператор TRUNCATE не требует фиксации на каждом шаге, он автоматически запускает фиксацию в конце выполнения оператора. Следовательно, мы должны быть осторожны при его использовании.
Мы часто путаемся между операторами TRUNCATE TABLE, DELETE TABLE и DROP TABLE в SQL. Поэтому, прежде чем двигаться дальше, обратитесь к этой ссылке для лучшего понимания — https://www. educba.com/sql-delete-statement/
Синтаксис и параметры
Основной синтаксис для использования оператора SQL TRUNCATE TABLE выглядит следующим образом: следует:
TRUNCATE TABLE имя_таблицы;
Параметры, используемые в приведенном выше синтаксисе:
Table_name: Это имя таблицы, чьи записи или строки вы хотите удалить навсегда.
Как оператор TRUNCATE TABLE работает в SQL?
Оператор TRUNCATE TABLE в SQL работает путем обнуления файла в базе данных, т. е. после выполнения оператора TRUNCATE в существующей таблице таблица становится пустой и, следовательно, не содержит записей строк. Он сбрасывает таблицу до нулевых записей.
Однако после усечения таблицы ее структура, столбцы, индексы, ограничения, отношения, представления и т. д. сохраняются. Вся операция похожа на стирание данных из таблицы, но с сохранением самой таблицы.
TRUNCATE в языке определения данных (DDL) эквивалентен DELETE в языке манипулирования данными (DML). Единственная разница между ними в том, что последний можно откатить, а первый нельзя. Однако TRUNCATE работает быстрее, чем DELETE, поскольку обычно обходит систему транзакций. Он не регистрируется (он может различаться в разных базах данных SQL) и не следует предикатам, поэтому кажется, что он выполняется быстрее, чем операция DELETE. DELETE — более безопасная и медленная операция.
Примеры SQL TRUNCATE()
Вот несколько примеров, подробно объясняющих оператор TRUNCATE TABLE.
Пример #1
Простой SQL-запрос для иллюстрации функции оператора TRUNCATE TABLE.
Чтобы понять SQL TRUNCATE TABLE, давайте рассмотрим таблицу «клиенты». Данные в таблице выглядят так.
Команда:
SELECT * FROM public.customers
Вывод:
Затем запустим оператор TRUNCATE TABLE для таблицы клиента, чтобы удалить все его записи. Мы можем сделать это, используя следующий SQL-запрос.
Команда:
TRUNCATE TABLE клиентов;
Вывод:
На рисунке ниже видно, что оператор TRUNCATE TABLE удалил все записи из таблицы клиента. Однако все столбцы, отношения, индексы, структуры таблиц были сохранены в целости и сохранности.
Команда:
ВЫБЕРИТЕ * ОТ клиентов;
Выходные данные:
Пример #2
SQL-запрос для иллюстрации различий между операторами SQL DROP TABLE и TRUNCATE TABLE.
Для этого рассмотрим две таблицы «customer_details» и «students». Структура таблиц и данные в них выглядят примерно так. Записи в таблице «customer_details» следующие:
Команда:
SELECT * FROM PUPLIAN ОТ ПУБЛ.СТУДЕНТОВ
Вывод:
Далее мы запустим TRUNCATE TABLE для таблицы customer_details и DROP TABLE для таблицы учащегося, а затем проверим разницу.
Команда:
TRUNCATE TABLE customer_details;
Вывод:
Команда:
УДАЛИТЬ СТОЛ студенты;
Вывод:
Из изображений выше видно, что оператор DROP TABLE быстрее, чем оператор TRUNCATE TABLE в SQL.
Теперь давайте проверим, что произошло с двумя таблицами после усечения и удаления соответственно.
Команда:
SELECT * FROM customer_details;
Вывод:
Команда:
ВЫБЕРИТЕ * ИЗ студентов;
Вывод:
Из двух приведенных выше изображений видно, что в операторе TRUNCATE структура таблицы сохранена, удалены только данные/записи из таблицы. В то время как в случае оператора DROP TABLE вся таблица была удалена из базы данных. Все его столбцы, индексы, отношения, привилегии и т. д. удаляются.
Заключение
TRUNCATE TABLE в SQL — это оператор языка определения данных (DDL), который очищает существующую таблицу, удаляя все записи, сохраняя столбцы таблицы, привилегии, индексы, представления, ограничения, отношения и т. д. Это эквивалентно, но быстрее, чем инструкция DELETE в SQL. Однако, в отличие от DELETE, его нельзя откатить.
Рекомендуемые статьи
Мы надеемся, что эта информация EDUCBA о «SQL TRUNCATE()» была вам полезна. Вы можете просмотреть рекомендуемые статьи EDUCBA для получения дополнительной информации.
- SQL ВЫБРАТЬ СЛУЧАЙНО ОБЪЕДИНЕНИЕ
- в SQL
- JSON в SQL
- CAST в PostgreSQL
ОБРЕЗАТЬ
На этой странице
Оператор TRUNCATE
удаляет все строки из таблицы. На высоком уровне это работает путем удаления таблицы и воссоздания новой таблицы с тем же именем.
Краткий обзор
TRUNCATETABLEtable_name,CASCADERESTRICTТребуемые привилегии
Пользователь должен иметь DROP
привилегия на столе.
Параметры
Параметр | Описание |
---|---|
имя_таблицы | Имя таблицы для усечения. |
КАСКАД | Усечь все таблицы с зависимостями внешнего ключа от усекаемой таблицы. |
ОГРАНИЧЕНИЕ | (по умолчанию) Не усекать таблицу, если какие-либо другие таблицы зависят от нее по внешнему ключу. |
Ограничения
TRUNCATE
является изменением схемы и, как таковое, не является транзакционным. Дополнительные сведения о том, как работают изменения схемы, см. в разделе Изменения схемы в сети.
Просмотр изменений схемы
Этот оператор изменения схемы зарегистрирован как задание. Вы можете просматривать длительные задания с помощью ПОКАЗАТЬ РАБОТУ
.
Примеры
Усечение таблицы (без зависимостей внешнего ключа)
значок/кнопки/копия> SELECT * FROM t1;
+----+------+ | идентификатор | имя | +----+------+ | 1 | фу | | 2 | бар | +----+------+ (2 ряда)значок/кнопки/копия
> ОБРЕЗАТЬ t1;значок/кнопки/копия
> SELECT * FROM t1;
+----+------+ | идентификатор | имя | +----+------+ +----+------+ (0 строк)
Усечение таблицы и зависимых таблиц
В этих примерах таблица заказов
имеет отношение внешнего ключа к таблице клиентов
. Следовательно, возможно только усечение таблицы клиентов
при одновременном усечении зависимой таблицы заказов
либо с помощью CASCADE
, либо явно.
Усечение зависимых таблиц с использованием
CASCADE
Предупреждение:
CASCADE
усекает все зависимые таблицы без их перечисления, что может привести к непреднамеренным и трудновосстановимым потерям. Чтобы избежать потенциального вреда, мы рекомендуем в большинстве случаев явно усекать таблицы. Дополнительные сведения см. в разделе Явное усечение зависимых таблиц.
> ОБРЕЗАТЬ клиентов;
pq: на "клиентов" ссылается внешний ключ из таблицы "заказы"значок/кнопки/копия
> ОТРЕЗАТЬ клиентов КАСКАД;значок/кнопки/копия
> ВЫБЕРИТЕ * ОТ клиентов;
+----+-------+ | идентификатор | электронная почта | +----+-------+ +----+-------+ (0 строк)значок/кнопки/копия
> ВЫБЕРИТЕ * ИЗ заказов;
+----+----------+------------+ | идентификатор | клиент | заказВсего | +----+----------+-------------+ +----+----------+-------------+ (0 строк)
Явно обрезать зависимые таблицы
icon/buttons/copy> ОБРЕЗАТЬ клиентов, заказы;значок/кнопки/копия
> ВЫБЕРИТЕ * ОТ клиентов;
+----+-------+ | идентификатор | электронная почта | +----+-------+ +----+-------+ (0 строк)значок/кнопки/копия
> ВЫБЕРИТЕ * ИЗ заказов;
+----+----------+------------+ | идентификатор | клиент | заказВсего | +----+----------+-------------+ +----+----------+-------------+ (0 строк)