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

Как очистить таблицу в sql

  • автор:

TRUNCATE TABLE (Transact-SQL)

Удаляет все строки в таблице или указанные секции таблицы, не записывая в журнал удаление отдельных строк. Инструкция TRUNCATE TABLE похожа на инструкцию DELETE без предложения WHERE, однако TRUNCATE TABLE выполняется быстрее и требует меньших ресурсов системы и журналов транзакций.

Синтаксис

-- Syntax for SQL Server and Azure SQL Database TRUNCATE TABLE < database_name.schema_name.table_name | schema_name.table_name | table_name >[ WITH ( PARTITIONS ( < | > [ , . n ] ) ) ] [ ; ] ::= TO
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse TRUNCATE TABLE < database_name.schema_name.table_name | schema_name.table_name | table_name >[;] 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

database_name

Имя базы данных.

schema_name

Имя схемы, которой принадлежит таблица.

table_name

Имя таблицы, которая должна быть усечена, или таблицы, из которой удаляются все строки. table_name должно быть литералом. table_name не может быть функцией OBJECT_ID() или переменной.

WITH ( PARTITIONS ( < partition_number_expression> | range> > [ , . n ] ) )

Область применения: SQL Server (SQL Server 2016 (13.x) до текущей версии)

Указывает секции для усечения или секции, из которых удаляются все строки. Если таблица не секционирована, аргумент WITH PARTITIONS приведет к возникновению ошибки. Если предложение WITH PARTITIONS не указано, будет усечена вся таблица.

можно указать одним из следующих способов:

  • Указав номер секции, например WITH (PARTITIONS (2))
  • Указав номера нескольких секций, разделив их запятыми, например WITH (PARTITIONS (1, 5))
  • Указав диапазоны секций и отдельные секции, например WITH (PARTITIONS (2, 4, 6 TO 8))
  • можно указать номерами секций, разделенными ключевым словом TO, например: WITH (PARTITIONS (6 TO 8)) .

Для усечения секционированной таблицы таблицы и индексы должны быть выровнены (секционированы одной функцией секционирования).

Замечания

Инструкция TRUNCATE TABLE обладает следующими преимуществами по сравнению с инструкцией DELETE.

  • Используется меньший объем журнала транзакций. Инструкция DELETE производит удаление по одной строке и заносит в журнал транзакций запись для каждой удаляемой строки. Инструкция TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения данных таблиц, и в журнал транзакций записывает только данные об освобождении страниц.
  • Обычно используется меньшее количество блокировок. Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу (включая блокировку схемы (SCH-M)) и страницу, но не каждую строку.
  • В таблице остается нулевое количество страниц, без исключений. После выполнения инструкции DELETE в таблице могут все еще оставаться пустые страницы. Например, чтобы освободить пустые страницы в куче, необходима, как минимум, монопольная блокировка таблицы (LCK_M_X). Если операция удаления не использует блокировку таблицы, таблица (куча) будет содержать множество пустых страниц. В индексах после операции удаления могут оказаться пустые страницы, хотя эти страницы будут быстро освобождены процессом фоновой очистки.

Инструкция TRUNCATE TABLE удаляет все строки таблицы, но структура таблицы и ее столбцы, ограничения, индексы и т. п. сохраняются. Чтобы удалить не только данные таблицы, но и ее определение, следует использовать инструкцию DROP TABLE .

Если таблица содержит столбец идентификаторов, счетчик этого столбца сбрасывается до начального значения, определенного для этого столбца. Если начальное значение не задано, используется значение по умолчанию, равное 1. Чтобы сохранить столбец идентификаторов, используйте инструкцию DELETE.

Для операции TRUNCATE TABLE можно выполнить откат.

Ограничения

Нельзя использовать TRUNCATE TABLE в таблицах в следующих случаях.

  • На таблицу ссылается ограничение FOREIGN KEY. Таблицу, имеющую внешний ключ, ссылающийся сам на себя, можно усечь.
  • Таблица является частью индексированного представления.
  • Таблица опубликована с использованием репликации транзакций или репликации слиянием.
  • Это темпоральная таблица с управлением версиями.
  • На таблицу ссылается ограничение EDGE.

Для таблиц с какими-либо из этих характеристик следует использовать инструкцию DELETE.

Инструкция TRUNCATE TABLE не может активировать триггер, поскольку она не записывает в журнал удаление отдельных строк. Дополнительные сведения см. в разделе CREATE TRIGGER (Transact-SQL).

В Azure Synapse Analytics and Analytics Platform System (PDW):

  • Инструкцию TRUNCATE TABLE нельзя использовать в инструкции EXPLAIN.
  • Инструкцию TRUNCATE TABLE невозможно выполнить внутри транзакции.

Усечение больших таблиц

В Microsoft SQL Server существует возможность удалять или усекать таблицы, которые имеют больше 128 экстентов, не удерживая одновременные блокировки для всех экстентов, предназначенных для удаления.

Разрешения

Минимально необходимым разрешением является ALTER для table_name. Разрешения TRUNCATE TABLE назначаются по умолчанию владельцу таблицы, членам предопределенной роли сервера sysadmin , а также предопределенных ролей базы данных db_owner и db_ddladmin , и они не могут быть переданы. Тем не менее инструкцию TRUNCATE TABLE можно встроить в модуль, например в хранимую процедуру, и предоставить соответствующие разрешения этому модулю с помощью предложения EXECUTE AS .

Примеры

А. Усечение таблицы

В ходе выполнения следующего примера удаляются все данные таблицы JobCandidate . Инструкции SELECT включены до и после инструкции TRUNCATE TABLE для сравнения результатов.

USE AdventureWorks2022; GO SELECT COUNT(*) AS BeforeTruncateCount FROM HumanResources.JobCandidate; GO TRUNCATE TABLE HumanResources.JobCandidate; GO SELECT COUNT(*) AS AfterTruncateCount FROM HumanResources.JobCandidate; GO 

B. Усечение секций таблицы

Область применения: SQL Server (SQL Server 2016 (13.x) до текущей версии)

В следующем примере выполняется усечение указанных секций секционированной таблицы. Синтаксис WITH (PARTITIONS (2, 4, 6 TO 8)) задает усечение секций с номерами 2, 4, 6, 7 и 8.

TRUNCATE TABLE PartitionTable1 WITH (PARTITIONS (2, 4, 6 TO 8)); GO 

Оператор DELETE стр. 1

Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:

Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft SQL Server и Sybase ASE. Transact-SQL также выполнить с помощью команды

Однако есть ряд особенностей в реализации команды TRUNCATE TABLE , которые следует иметь в виду:

  • не журнализируется удаление отдельных строк таблицы; в журнал записывается только освобождение страниц, которые были заняты данными таблицы;
  • не отрабатывают триггеры, в частности, триггер на удаление;
  • команда неприменима, если на данную таблицу имеется ссылка по внешнему ключу, и даже если внешний ключ имеет опцию каскадного удаления.
  • значение счетчика ( IDENTITY ) сбрасывается в начальное значение.

Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.

Все блокноты можно удалить с помощью оператора

Transact-SQL расширяет синтаксис оператора DELETE , вводя дополнительное предложение FROM :

При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM .

При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк. Поясним сказанное на примере.

Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в таблице PC.

Используя стандартный синтаксис, эту задачу можно решить следующим запросом:

Заметим, что предикат type = ‘pc’ необходим здесь, чтобы не были удалены также модели принтеров и портативных компьютеров.

Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:

Здесь применяется внешнее соединение, в результате чего столбец PC.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL -значение, что и используется для идентификации подлежащих удалению строк.

Страницы: 1 2 3

TRUNCATE TABLE SQL Server

Оператор TRUNCATE TABLE используется для очистки всех записей из таблицы в SQL Server. Он выполняет ту же функцию, что и оператор DELETE, без предложения WHERE.

Синтаксис

Синтаксис оператора TRUNCATE TABLE в SQL Server (Transact-SQL):

TRUNCATE TABLE [database_name.] [schema_name.] table_name
[ WITH ( PARTITIONS ( partition_number
| partition_number TO partition_number ) ] ;

Параметры или аргументы

database_name — необязательный. Если указано, это имя базы данных.
schema_name — необязательный. Если указано, это имя схемы, к которой принадлежит таблица.
table_name — таблица, которую вы хотите очистить.
WITH (PARTITIONS (partition_number | partition_number TO partition_number) — необязательно и может использоваться только с многораздельными таблицами. Если указано, partition_number — это номер раздела, который вы хотите усечь в многораздельной таблице. Чтобы перечислить несколько разделов, запятые разделяют значения или диапазоны номеров разделов. Если вы попытаетесь использовать этот раздел с таблицей, которая не разбита на разделы, SQL Server вернет ошибку. Эта функция недоступна во всех версиях SQL Server.

Примечание

  • Вы не можете очистить таблицу, на которую ссылается внешний ключ.
  • Прежде чем вы сможете очистить таблицу, вы должны обладать необходимыми привилегиями, такими как ALTER TABLE.

Пример

В SQL Server очистка таблицы — это быстрый способ очистить записи из таблицы, если вам не нужно беспокоиться об откате. Когда таблица очищается, удаление строк не регистрируется, поэтому откатывание невозможно. Очистка таблицы также намного проще, чем удаление таблицы и ее воссоздание.

Рассмотрим пример использования оператора TRUNCATE TABLE в SQL Server.
Например:

Как очистить таблицу в MySQL?

Во время работы с таблицей данных MySQL в операционной системе Линукс может возникнуть ситуация, когда ее необходимо очистить, чтобы, например, освободить свободное место и ускорить работу ОС. В этой инструкции расскажем, как это сделать быстро и безопасно.

Что такое таблица в MySQL?

Таблица в MySQL в Linux — структурированный набор данных, который содержит информацию, организованную в виде строк и столбцов. Каждый столбец имеет свой тип данных, определенный при создании таблицы, например, VARCHAR для текстовых данных или INT для целочисленных данных. Таблицы используются для хранения и управления данными в базе данных MySQL. Они могут быть созданы с помощью команды CREATE TABLE в SQL-запросах.

Зачем чистить таблицу?

Очистка таблицы в MySQL в Линукс может быть полезна по нескольким причинам:

  1. Освобождение места на сервере — если таблица содержит большое количество записей и перестала использоваться, её очистка позволит освободить место на жестком диске сервера.
  2. Ускорение работы базы данных — чем меньше записей в таблице, тем быстрее она обрабатывается.
  3. Устранение ошибок — очистка таблицы может помочь в решении проблем, связанных с некорректными данными или неправильными индексами.
  4. Сохранение конфиденциальной информации — если таблица содержит конфиденциальные данные, которые больше не нужны, их очистка будет способствовать сохранению конфиденциальности.

В целом, очистка таблицы может помочь оптимизировать работу базы данных и увеличить её производительность.

Инструкция по очистке таблицы в MySQL

Для очистки таблицы в MySQL в Linux можно использовать следующий запрос:

Этот запрос удалит все строки из таблицы, но не удаляет саму таблицу. Если вы хотите удалить все данные и саму таблицу, можно использовать запрос DROP TABLE

table_name — название таблицы, которую нужно удалить.

Обратите внимание, что эти запросы не могут быть отменены, поэтому следует быть внимательным при их использовании. Перед выполнением запроса обязательно сделайте резервную копию данных.

Добавить комментарий

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