Оператор delete sql: DELETE | SQL | SQL-tutorial.ru

Оператор DELETE (Microsoft Access SQL)

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Область применения: Access 2013, Office 2013

Создает запрос на удаление, который удаляет записи из одной или нескольких таблиц, указанных в предложении FROM, отвечающих предложению WHERE.

Синтаксис

DELETE [table.*] FROM table WHERE criteria

Оператор DELETE состоит из следующих частей:

table

Необязательное имя таблицы, из которой удаляются записи.

table

Имя таблицы, из которой удаляются записи.

criteria

Выражение, определяющее, какие записи нужно удалить.

DELETE особенно полезен, если вы хотите удалить большое количество записей.

Чтобы удалить всю таблицу из базы данных, можно использовать метод Execute с оператором DROP. Однако, если удалить таблицу, может потеряться структура. С другой стороны при использовании DELETE удаляются только данные; а структура таблицы и все ее свойства, такие как атрибуты поля и индексы, остаются нетронутыми.

Вы можете использовать DELETE, чтобы удалить записи из таблиц, которые находятся в связи «один ко многим» с другими таблицами. Операции каскадного удаления вызывают удаление записей в таблицах, расположенных на стороне многих связей, при удалении соответствующей записи на стороне одной связи при запросе. Например, в связи между таблицами Клиенты и Заказы, таблица Клиенты находится на стороне одной связи, а таблица Заказы находится на стороне многих связей. Удаление записи из результатов клиентов в соответствующих записях заказов, удаляемых в случае, если указан параметр каскадного удаления.

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

Null.

Важно!

  • Удаление записи, выполненное с помощью запроса на удаление, нельзя отменить. Чтобы узнать, какие записи будут удалены, сначала изучите результаты запроса на выборку, который использует те же критерии, и только после этого запустите запрос на удаление.
  • Сохраняйте резервные копии ваших данных в любое время. Если вы удалили не те записи, вы сможете восстановить их из резервных копий.

Пример

В этом примере будут удалены все записи для сотрудников, чья должность — стажер. Если оператор FROM содержит только одну таблицу, нет необходимости перечислять имя таблицы в операторе DELETE.

    Sub DeleteX() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Delete employee records where title is Trainee.     
        dbs.Execute "DELETE * FROM " _ 
            & "Employees WHERE Title = 'Trainee';" 
         
        dbs.Close 
     
    End Sub

Оператор DELETE

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

Предложение WHERE в операторе DELETE является необязательным: если оно не задано, то удаляются все строки таблицы. Рассмотрим несколько примеров:

• Удаление всех книг из таблицы books:

• Удаление из таблицы books всех книг, которые были опубликованы до определенной даты, и возврат количества удаленных строк:

Конечно, при работе с реальными объектами все эти команды DML становятся существенно более сложными. Например, вы можете обновить несколько столбцов данными, полученными в результате выполнения подзапроса. Начиная с версии Oracle9/ Database можно заменить имя таблицы табличной функцией, возвращающей результирующее множество, с которым и будет работать оператор DML (см. также главу 3).

Oracle поддерживает ряд атрибутов курсора для неявных курсоров, стоящих за операторами DML, — они будут рассмотрены в следующем разделе.

Атрибуты курсоров для операций DML

Oracle позволяет получить доступ к информации о последней выполненной встроенной команде DML через атрибуты неявных курсоров SQL (они совпадают с атрибутами, перечисленными в табл. 1.6). Значения, возвращаемые данными атрибутами для операторов DML, представлены в табл. 1.8.

Таблица 1.8. Атрибуты неявных курсоров SQL для операторов DML

Имя

Описание

SQL%FOUND

Возвращает TRUE, если была модифицирована (создана, изме­нена или удалена) одна или несколько строк.

SQL%NOTFOUND

Возвращает TRUE, если командой DML не было модифицирова­но ни одной строки.

SQL%ROWCOUNT

Возвращает количество строк, модифицированных командой DML.

Рассмотрим примеры использования атрибутов неявных курсоров.

• Используем атрибут SQL%FOUND для определения того, обработал ли наш оператор DML сколько-нибудь строк. Пусть, например, некоторый автор время от времени меняет свое имя и хочет, чтобы именно это новое имя использовалось во всех его книгах. Создаем маленькую процедуру, которая будет обновлять имя автора, а затем сообщать о том, были ли изменены какие-то строки, через логическую переменную:

• Используем атрибут SQL%ROWCOUNT в случае, когда необходимо определить точное количество строк, обработанных оператором DML. Переработаем приведенную выше процедуру изменения имени, с тем чтобы она возвращала чуть больше информации:

< Предыдущая   Следующая >

Использование инструкции DELETE в SQL

Удаление данных — последняя из четырех основных функций, выполняемых в SQL. Удаление данных может вызвать ряд проблем, поэтому его следует использовать с осторожностью. Например, если у вас не настроены целостность и отношения, удаление записей из одной таблицы может привести к потере записей в другой. Некоторые администраторы даже не позволяют вам удалять записи. В качестве альтернативы можно сделать запись активной или неактивной, но никогда не удалять записи. Если вы запускаете собственную базу данных или разрабатываете программное обеспечение, в конечном итоге вам нужно будет знать, как удалять записи.

Как и оператор UPDATE, оператор DELETE технически не требует предложения WHERE, но если вы забудете об этом предложении, это может привести к катастрофическим последствиям для ваших данных. Если вы используете DELETE и забываете предложение WHERE, SQL идентифицирует оператор как допустимый и удаляет все записи в таблице.

Ниже приведены основные требования к оператору DELETE.

DELETE FROM

 

Вышеприведенный оператор удаляет все строки. Чтобы избежать ошибки удаления всех записей, ниже приведен оператор DELETE с предложением WHERE.

УДАЛИТЬ ИЗ <таблицы>

Предложение WHERE 

У нас есть следующая таблица данных о клиентах.

идентификатор клиента

Имя

Фамилия

Город

Состояние

123

Тим

Смарт

Майами

FL

321

Фрэнк

Доу

Даллас

ТХ

455

Эд

Томпсон

Атланта

Г.А.

456

Эд

Томпсон

Атланта

Г. А.

457

Джо

Смит

Майами

ФЗ

458

Фрэнк

Доу

Даллас

ТХ

459

Эд

Томпсон

Атланта

Г.А.

Предположим, вы хотите удалить одного клиента. Вы хотите удалить CustomerId 123, потому что он вам больше не нужен в таблице. Обратите внимание, что удаление клиента, который ссылается на другие таблицы, такие как заказы, приведет к потере записей в таблице заказов. Если в ваших таблицах установлены целостность и отношения, SQL возвращает ошибку, если вы пытаетесь удалить записи со связанными записями.

Следующая инструкция SQL удаляет запись о клиенте с идентификатором 123. 

УДАЛИТЬ ИЗ Заказчика

ГДЕ CustomerId = 123 

В результате ваша таблица выглядит следующим образом.

идентификатор клиента

Имя

Фамилия

Город

Состояние

321

Фрэнк

Доу

Даллас

ТХ

455

Эд

Томпсон

Атланта

Г.А.

456

Эд

Томпсон

Атланта

Г.А.

457

Джо

Смит

Майами

FL

458

Фрэнк

Доу

Даллас

ТХ

459

Эд

Томпсон

Атланта

Хотите узнать больше? Почему бы не пройти онлайн-курс SQL?

Г. А.

Если вы помните из главы UPDATE, вы можете использовать оператор SELECT в предложении WHERE. То же самое верно и для оператора DELETE. Например, предположим, что у вас есть отдельная таблица, содержащая повторяющиеся записи клиентов. Из приведенной выше таблицы видно, что записи 355, 456 и 459 являются дубликатами. У вас есть таблица, содержащая 456 и 459, чтобы указать, что это повторяющиеся записи. Конечно, когда вы работаете с большими таблицами базы данных, вы не сможете просмотреть таблицу и выявить повторяющиеся записи. Вы полагаетесь на внешнюю таблицу, в которой вы должны удалять записи, используя тот же тип оператора SELECT, который вы использовали в операторе UPDATE.

В этом примере внешняя таблица выглядит как следующий набор данных. Мы назовем таблицу «DeleteCustomer».

идентификатор клиента

Имя

Фамилия

Город

Состояние

456

Эд

Томпсон

Атланта

Г. А.

459

Эд

Томпсон

Атланта

Г.А.

Следующая инструкция DELETE использует идентификатор CustomerId из этой таблицы и использует его для удаления основной таблицы клиентов.

DELETE FROM Customer

WHERE CustomerId IN (выберите CustomerId из DeleteCustomer) 

Приведенный выше оператор SQL работает так же, как работал оператор UPDATE, когда мы использовали вложенный SELECT, за исключением того, что с этим оператором записи удаляются, а не ОБНОВЛЯЮТСЯ. В SQL оператор sub-SELECT выполняется первым. Вложенный оператор SELECT получает список идентификаторов клиентов и передает их основному оператору DELETE. Обратите внимание, что предложение WHERE содержит оператор IN, а не знак равенства. Предложение IN указывает SQL манипулировать записями в наборе записей, определенном оператором SELECT.

Предложение WHERE оператора DELETE ищет все идентификаторы клиентов и удаляет их на основе совпадений. В этом примере есть два подходящих клиента. Оператор удаляет записи, и вашим результатом является следующий набор данных.

идентификатор клиента

Имя

Фамилия

Город

Состояние

321

Фрэнк

Доу

Даллас

ТХ

455

Эд

Томпсон

Атланта

Г.А.

457

Джо

Смит

Майами

FL

458

Фрэнк

Доу

Даллас

ТХ

Вернемся к исходной таблице и предположим, что вы хотите удалить только выбранный набор записей в таблице DeleteCustomer. В некоторых случаях вам потребуется удалить только набор записей из внешней таблицы, которые соответствуют определенным критериям. Следующий оператор DELETE удаляет только одну запись из основной таблицы клиентов.

УДАЛИТЬ ИЗ Customer

WHERE CustomerId IN (выберите CustomerId из DeleteCustomer WHERE CustomerId = 459) 

В результате ваши данные теперь выглядят следующим образом.

идентификатор клиента

Имя

Фамилия

Город

Состояние

321

Фрэнк

Доу

Даллас

ТХ

455

Эд

Томпсон

Атланта

Г.А.

456

Эд

Томпсон

Атланта

Г. А.

457

Джо

Смит

Майами

FL

458

Фрэнк

Доу

Даллас

ТХ

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

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

Например, предположим, что вы знаете, что хотите удалить клиента с именем «Эд Томпсон», но не знаете идентификатор клиента. Вы знаете, что его идентификатор клиента меньше 456. В этом примере идентификатор клиента равен 455, но у вас могут быть тысячи записей о клиентах, и вы не сможете идентифицировать идентификатор клиента, просмотрев набор данных.

Следующая инструкция SQL удаляет записи на основе двух параметров в предложении WHERE.

УДАЛИТЬ ИЗ Customer

ГДЕ first_name = ‘Эд’ and last_name=’Thompson’ and CustomerId < 456 

В приведенном выше примере установлены три параметра. Первые два идентифицируют имя, но в вашей базе данных есть несколько клиентов «Эд Томпсон». Если бы вы использовали только эти два параметра, обе учетные записи клиентов были бы удалены. Добавление предложения CustomerID < 456 указывает SQL удалять только клиентов с идентификатором меньше 456. В примере набора данных у вас есть только 1 запись, соответствующая предложению WHERE, поэтому SQL удаляет только одну запись. Ваше программное обеспечение SQL должно сообщить вам, что одна запись была затронута.

Ваша таблица Customer теперь выглядит следующим образом.

идентификатор клиента

Имя

Фамилия

Город

Состояние

321

Фрэнк

Доу

Даллас

ТХ

456

Эд

Томпсон

Атланта

Г.А.

457

Джо

Смит

Майами

FL

458

Фрэнк

Доу

Даллас

ТХ

Теперь у вас есть один клиент по имени Эд Томпсон.

Один совет при использовании оператора DELETE и предложения WHERE. Предположим, вы создали оператор DELETE, но не уверены, какие записи будут удалены. Поскольку вы знаете, что удаление записей может повредить целостности ваших данных, что вы можете сделать? Ответ заключается в том, чтобы сначала выполнить предложение WHERE как оператор SELECT.

Вернемся к набору данных, в таблице которого есть два клиента Эда Томпсона. Ваша текущая таблица выглядит следующим образом.

идентификатор клиента

Имя

Фамилия

Город

Состояние

321

Фрэнк

Доу

Даллас

ТХ

455

Эд

Томпсон

Атланта

Г.А.

456

Эд

Томпсон

Атланта

Г. А.

457

Джо

Смит

Майами

FL

458

Фрэнк

Доу

Даллас

ТХ

Вы снова хотите удалить только клиентов с именем Эд Томпсон, у которых идентификатор меньше 456, но вы не знаете, будете ли вы удалять одну, две или тысячи записей. Ответ заключается в том, чтобы написать оператор SELECT с точными параметрами предложения WHERE в качестве оператора DELETE. Оператор SELECT сообщит вам, какие записи будут удалены, поэтому убедитесь, что удаляете только нужные записи.

Например, следующий оператор SELECT соответствует последнему оператору DELETE, который мы написали ранее.

SELECT * FROM Customer

ГДЕ first_name = ‘Ed’ and last_name=’Thompson’ and CustomerId < 456 

База данных SQL покажет вам следующий набор записей.

идентификатор клиента

Имя

Фамилия

Город

Состояние

455

Эд

Томпсон

Атланта

Г.А.

Сначала используя оператор SELECT, вы можете просмотреть результаты, чтобы убедиться, что данные, которые вы удаляете, верны. Конечно, если у вас есть тысячи записей, вы не сможете просмотреть их все. Выборочно проверьте свой набор записей и убедитесь, что данные верны. Использование оператора SELECT перед выполнением DELETE убережет вас от ошибок.

Теперь вы можете использовать предложение WHERE в операторе DELETE. Вы точно знаете количество записей, которые будут удалены. Выполнение следующего запроса DELETE удаляет 1 запись, возвращенную оператором SELECT.

DELETE FROM Customer

WHERE first_name = ‘Ed’ and last_name=’Thompson’ and CustomerId < 456 

Обратите внимание, что предложения WHERE одинаковы, поэтому вы добавили проверку перед удалением записей.

Есть последний способ удалить все записи из таблицы. Например, у вас может быть временная таблица, которую вы хотите очищать каждый раз при импорте записей. Можно использовать оператор DELETE, но SQL предлагает оператор TRUNCATE, который удаляет все записи из таблицы. Однако используйте оператор TRUNCATE осторожно. Инструкции DELETE можно откатить в большинстве систем баз данных, в то время как TRUNCATE удаляет записи навсегда. Единственный способ восстановления после оператора TRUNCATE — это восстановление из резервной копии.

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

Заявление об удалении SQL: лучшие способы его использования — Управление базой данных — Блоги

В реляционных базах данных мы создаем таблицы для хранения данных в различных форматах. SQL Server хранит данные в формате строки и столбца, который содержит значение, связанное с каждым типом данных. Когда мы проектируем таблицы SQL, мы определяем типы данных, такие как целое число, число с плавающей запятой, десятичное число, varchar и бит. Например, таблица, в которой хранятся данные о клиентах, может иметь такие поля, как имя клиента, адрес электронной почты, адрес, штат, страна и т. д. Различные команды SQL выполняются над таблицей SQL и могут быть разделены на следующие категории:

  • Язык определения данных (DDL):  Эти команды используются для создания и изменения объектов базы данных в базе данных.
    • Создать:  Создает объекты
    • Изменить:  Изменяет объекты
    • Удаление: Удаляет объекты
    • Усечение: Удаляет все данные из таблицы
  • Язык управления данными (DML):  Эти команды вставляют, извлекают, изменяют, удаляют и обновляют данные в базе данных.
    • Выберите:  Извлекает данные из одной или нескольких таблиц
    • Вставка: Добавляет новые данные в таблицу
    • Обновление: Изменяет существующие данные
    • Удалить:  Удаляет существующие записи в таблице

  • Язык управления данными (DCL):  Эти команды связаны с правами или элементами управления разрешениями в базе данных.
    • Предоставление:  Назначает разрешения пользователю
    • Отзыв:  Отменяет разрешения у пользователя
  • Язык управления транзакциями (TCL):  Эти команды управляют транзакциями в базе данных.
    • Фиксация: Сохраняет изменения, сделанные запросом
    • Откат:  Откатывает явную или неявную транзакцию к началу транзакции или к точке сохранения внутри транзакции
    • .
    • Сохранение транзакций:  Устанавливает точку сохранения или маркер внутри транзакции

Предположим, у вас есть данные о заказах клиентов, хранящиеся в таблице SQL. Если вы будете постоянно вставлять данные в эту таблицу, она может содержать миллионы записей, что вызовет проблемы с производительностью в ваших приложениях. Обслуживание вашего индекса также может занять очень много времени. Часто вам не нужно хранить заказы старше трех лет. В этих случаях вы можете удалить эти записи из таблицы. Это сэкономит место для хранения, а также уменьшит ваши усилия по обслуживанию.

Вы можете удалить данные из таблицы SQL двумя способами:

  • Используя оператор удаления SQL
  • Использование усечения

Позже мы рассмотрим разницу между этими SQL-командами. Давайте сначала рассмотрим оператор удаления SQL.

Оператор удаления SQL без каких-либо условий

В операторах языка обработки данных (DML) оператор удаления SQL удаляет строки из таблицы. Вы можете удалить определенную строку или все строки. Базовый оператор удаления не требует никаких аргументов.

Давайте создадим таблицу Orders SQL, используя приведенный ниже скрипт. Эта таблица имеет три столбца [OrderID], [ProductName] и [ProductQuantity].

 Создать таблицу заказов  ( OrderID int,   ProductName varchar(50),   ProductQuantity int   )  

Вставьте несколько записей в эту таблицу.

 Вставить в значения Orders (1, 'ABC book', 10),  (2, 'XYZ', 100),   (3, 'SQL book', 50)  

Теперь предположим, что мы хотим удалить данные таблицы. Вы можете указать имя таблицы для удаления данных с помощью оператора удаления. Оба оператора SQL одинаковы. Мы можем указать имя таблицы из (необязательного) ключевого слова или указать имя таблицы сразу после удаления.

 Удалить заказы  Перейти   Удалить из заказов   GO  

Оператор удаления SQL с отфильтрованными данными

Эти операторы удаления SQL удаляют все данные таблицы. Обычно мы не удаляем все строки из таблицы SQL. Чтобы удалить определенную строку, мы можем добавить предложение where с оператором удаления. Предложение where содержит критерии фильтрации и, в конечном счете, определяет, какие строки следует удалить.

Например, предположим, что мы хотим удалить идентификатор заказа 1. Как только мы добавим предложение where, SQL Server сначала проверит соответствующие строки и удалит их.
Удалить заказы, где orderid=1

Если условие предложения where ложно, строки не удаляются. Например, мы удалили заказ 1 из таблицы заказов. Если мы снова выполним оператор, он не найдет ни одной строки, удовлетворяющей условию предложения where. В этом случае он возвращает 0 затронутых строк.

Оператор удаления SQL и оператор TOP

Вы также можете использовать оператор TOP для удаления строк. Например, приведенный ниже запрос удаляет первые 100 строк из таблицы «Заказы».

 Удалить верхнюю часть (100) [OrderID]  из заказов  

Поскольку мы не указали «ORDER BY», он выбирает случайные строки и удаляет их. Мы можем использовать предложение Order by для сортировки данных и удаления верхних строк. В приведенном ниже запросе он сортирует [OrderID] в порядке убывания, а затем удаляет его из таблицы [Orders].

 Удалить из заказов, где [OrderID] In  (   Выбрать первые 100 [OrderID] ИЗ заказов   заказ по [OrderID] Desc   )  

Удаление строк на основе другой таблицы

Иногда нам нужно удалить строки на основе другой таблицы. Эта таблица может существовать в той же базе данных или нет.

  • Поиск в таблице

Для удаления этих строк можно использовать метод поиска в таблице или соединение SQL. Например, мы хотим удалить из таблицы [Заказы] строки, которые удовлетворяют следующему условию:

Должны иметь соответствующие строки в таблице [dbo].[Клиент].

Посмотрите на приведенный ниже запрос, здесь у нас есть оператор выбора в предложении where оператора удаления. SQL Server сначала получает строки, удовлетворяющие оператору select, а затем удаляет эти строки из таблицы [Orders] с помощью оператора удаления SQL.

 Удалить заказы, где идентификатор заказа указан в  (выберите идентификатор заказа   от клиента)  
  • SQL Join

В качестве альтернативы мы можем использовать соединения SQL между этими таблицами и удалить строки. В приведенном ниже запросе мы соединяем таблицы [Заказы]] с таблицей [Клиент]. Соединение SQL всегда работает с общим столбцом между таблицами. У нас есть столбец [OrderID], который объединяет обе таблицы.

 УДАЛИТЬ Заказы  ИЗ Заказов o   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Клиент c ON o.orderid=c.orderid  

Чтобы понять приведенный выше оператор удаления, давайте рассмотрим фактический план выполнения.

В соответствии с планом выполнения он выполняет сканирование обеих таблиц, получает совпадающие данные и удаляет их из таблицы Orders.

  • Общее табличное выражение (CTE)

Мы также можем использовать общее табличное выражение (CTE) для удаления строк из таблицы SQL. Во-первых, мы определяем CTE, чтобы найти строку, которую мы хотим удалить.

Затем мы объединяем CTE с таблицей SQL Orders и удаляем строки.

 С cteOrders AS  (ВЫБЕРИТЕ OrderID   ОТ Заказчика  , ГДЕ CustomerID = 1 )   УДАЛИТЬ Заказы   ИЗ cteOrders sp   ВНУТРЕННЕЕ СОЕДИНЕНИЕ = sporderid dbo.Orders;  

Влияние на диапазон идентификаторов

Столбцы идентификаторов в SQL Server генерируют уникальные последовательные значения для вашего столбца. Они используются в основном для уникальной идентификации строки в таблице SQL. Столбец первичного ключа также является хорошим выбором для кластеризованного индекса в SQL Server.

В приведенном ниже сценарии у нас есть таблица [Employee]. Эта таблица имеет идентификатор столбца идентификаторов.

 Создать таблицу Сотрудник  (   id int identity(1,1),   [Имя] varchar(50)   )  

Мы вставили 50 записей в эту таблицу, которые сгенерировали значения идентификаторов для столбца id.

 Объявить @id int=1  Пока(@id<=50)   НАЧАТЬ   Вставить в Employee([Name]) values('Test'+CONVERT(VARCHAR,@ID))   Set @id=@id+1   END  

Если мы удалим несколько строк из таблицы SQL, значения идентификаторов для последующих значений не сбрасываются. Например, давайте удалим несколько строк со значениями идентификатора от 20 до 25.

 Удалить из сотрудника , где идентификатор от 20 до 25  

Теперь просмотрите записи таблицы.

 Выберите * у сотрудника, где id>15 

Показывает разрыв в диапазоне значений идентификатора.

Оператор удаления SQL и журнал транзакций

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

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

 Рекомендации

  • Перед удалением данных всегда следует выполнять резервное копирование.
  • По умолчанию SQL Server использует неявные транзакции и фиксирует записи без запроса пользователя. Рекомендуется начинать явную транзакцию с помощью команды «Начать транзакцию». Это дает вам возможность зафиксировать или откатить транзакцию. Вам также следует часто выполнять резервное копирование журнала транзакций, если ваша база данных находится в режиме полного восстановления.
  • Вы хотите удалять данные небольшими порциями, чтобы избежать чрезмерного использования журнала транзакций. Это также позволяет избежать блокировок для других транзакций SQL.
  • Вы должны ограничить разрешения, чтобы пользователи не могли удалять данные. Только авторизованные пользователи должны иметь доступ к удалению данных из таблицы SQL.
  • Вы хотите запустить оператор удаления с предложением where. Он удаляет отфильтрованные данные из таблицы SQL. Если ваше приложение требует частого удаления данных, рекомендуется периодически сбрасывать значения идентификаторов. В противном случае вы можете столкнуться с проблемами исчерпания значения идентификатора.
  • Если вы хотите очистить таблицу, рекомендуется использовать оператор truncate. Оператор truncate удаляет все данные из таблицы, использует минимальное протоколирование транзакций, сбрасывает диапазон значений идентификатора и работает быстрее, чем оператор удаления SQL, поскольку сразу освобождает все страницы для таблицы.
  • Если вы используете ограничения внешнего ключа (родительско-дочерние отношения) для своих таблиц, вы должны удалить строку из дочерней строки, а затем из родительской таблицы. Если вы удаляете строку из родительской строки, вы также можете использовать параметр каскадного удаления для автоматического удаления строки из дочерней таблицы. Вы можете обратиться к статье: Удалить каскад и обновить каскад во внешнем ключе SQL Server для получения дополнительной информации.
  • Если вы используете оператор top для удаления строк, SQL Server удаляет строки случайным образом. Вы всегда должны использовать предложение top с соответствующими предложениями Order by и Group by.
  • Оператор удаления получает эксклюзивную блокировку намерения для таблицы ссылок; поэтому в течение этого времени никакие другие транзакции не могут изменять данные. Вы можете использовать подсказку NOLOCK для чтения данных.
  • Следует избегать использования табличной подсказки для переопределения поведения блокировки по умолчанию оператора удаления SQL; его должны использовать только опытные администраторы баз данных и разработчики.

Важные замечания

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

Оставить комментарий

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

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