Mssql delete: DELETE (Transact-SQL) — SQL Server

Команда SQL для удаления и обновление данных в базе (DELETE, UPDATE)

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

Удаление данных из базы (DELETE)

Удаление из базы данных происходит с помощью команды «DELETE» (переводится с английского как «УДАЛИТЬ»). Функция удаляет не одну строку, а несколько, при этом выбирает для удаления строки по логике функции «SELECT». То есть чтобы удалить данные из базы, необходимо точно определить их. Приведём пример SQL команды для удаления одной строчки:

DELETE FROM `USERS` WHERE `ID` = 2 LIMIT 1;

Благодаря этому запросу из таблицы «USERS» будет удалена одна запись, у которой в столбце «ID» стоит значение «2».

Обратите внимание, что в конце запроса стоит лимит на выборку «LIMIT 1;» размером в 1 строку.

Его можно было не ставить, если поле «ID» является «PRIMARY KEY» (первичный ключ, то есть содержит только уникальные значения). Но всё-таки рекомендуем ставить ограничение «LIMIT 1;» в любом случае, если вы намерены удалить только одну строчку.

Теперь попробуем удалить сразу диапазон данных. Для этого достаточно составить запрос, в результате выполнения которого вернётся несколько строк. Все эти строки будут удалены:

DELETE FROM `USERS` WHERE `ID` >= 5;

Этот запрос удалит все строки в таблицы, у которых в столбце «ID» стоит значение меньше 5. Если не поставить никакого условия «WHERE» и лимита «LIMIT», то будут удалены абсолютно все строки в таблице:

DELETE FROM `USERS`;

На некоторых версиях MySQL способ удаления всех строк через «DELETE FROM _;» может работать медленнее, чем «

TRUNCATE _;«; Поэтому для очистки всей таблицы лучше всё-таки использовать «TRUNCATE».

Обновление данных в базе (UPDATE)

Функция обновления «UPDATE» (переводится с английского как «ОБНОВИТЬ») довольно часто используется в проектах сайтов. Как и в случае с функцией «DELETE», фкнция обновления не успокоится до тех пор, пока не обновит все поля, которые подходят под условия, если нет лимита на выборку. Поэтому необходимо задавать однозначные условия, чтобы вместо одной строки нечаянно не обновить половину таблицы. Приведём пример использования команды «UPDATE»:

UPDATE `USERS` SET `NAME` = 'Мышь' WHERE `ID` = 3 LIMIT 1;

В этом примере, в таблие «USERS» будет установлено значение «Мышь» в столбец «NAME» у строки, в столбце «ID» которой стоит значение «3». Можно обновить сразу несколько столбцов у одной записи, передав значения через запятую. Попробуем обновить не только значение с толбце «NAME», но и значение в столбце «FOOD» используя один запрос:

UPDATE `USERS` SET `NAME` = 'Мышь', `FOOD` = 'Сыр' WHERE `ID` = 3 LIMIT 1;

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

Была ли эта статья полезна? Есть вопрос?

Закажите недорогой хостинг Заказать

всего от 290 руб

Удаление большого количества записей в SQL Server

SQL Server

Давайте рассмотрим четыре варианта — два плохих и два хороших — для удаления миллиона или более записей из одной таблицы SQL Server.

Майк Вулф

• 4 мин чтения

Вам когда-нибудь приходилось удалять несколько миллионов записей из базы данных SQL Server?

Если вы когда-нибудь окажетесь в такой ситуации, вам следует знать некоторые вещи о том, что вы должны и не должны делать.

Давайте начнем.

Как НЕ ДЕЛАТЬ

НЕПРАВИЛЬНЫЙ ВАРИАНТ #1- Удаление из связанной таблицы в MS Access

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

Если вы выполните запрос DELETE * FROM MyLinkedSqlServerTable в Access, Access выполнит:

  1. Запустит запрос выбора, чтобы вернуть все значения первичного ключа в таблице
  2. Начать транзакцию с SQL Server
  3. Отправить отдельную команду DELETE для каждой отдельной строки в таблице
  4. Спросить, уверены ли вы, что хотите удалить «xxx количество строк»
  5. Если вы нажмете OK, будет зафиксируйте транзакцию, иначе она откатится

Это займет вечность. Кроме того, как только вы превысите определенное количество строк, Access предупредит вас, что если вы продолжите, у вас не будет возможности отменить операцию.

НЕПРАВИЛЬНЫЙ ВАРИАНТ № 2. Использование оператора DELETE T-SQL для одновременного удаления миллионов строк

Использование SSMS или сквозного запроса в Access — гораздо лучшие варианты, чем удаление большого количества записей из связанной таблицы SQL Server .

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

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

Как это сделать

ХОРОШИЙ ВАРИАНТ №1: TRUNCATE table

Безусловно, самый быстрый способ удалить группу записей — это использовать оператор TRUNCATE TABLE .

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

  • Чтобы удалить ВСЕ записи в таблице
  • Для таблиц, которые не имеют отношений ссылочной целостности с другими таблицами
  • Для таблиц, которые не участвуют в репликации

Если это ваша ситуация, то TRUNCATE ТАБЛИЦА — это путь.

Если это не так, читайте следующий лучший вариант.

ХОРОШИЙ ВАРИАНТ №2: УДАЛЕНИЕ записей пакетами

Если вы не можете использовать TRUNCATE TABLE, лучше всего удалить записи пакетами.

При таком подходе вы выполняете несколько операторов DELETE. Каждый оператор удаляет подмножество общего числа записей, которые вы хотите удалить. Например, вместо того, чтобы удалить один миллион записей с помощью одного оператора DELETE, вы удалите 100 000 записей десять раз.

К сожалению, это немного сложнее, чем кажется, поскольку вы не можете использовать предложение TOP непосредственно в операторе DELETE:

Ограничения и ограничения
Когда TOP используется с DELETE строки, на которые делается ссылка, не расположены в каком-либо порядке, и предложение ORDER BY не может быть прямо указано в этом операторе. Если вам нужно использовать TOP для удаления строк в осмысленном хронологическом порядке, вы должны использовать TOP вместе с предложением ORDER BY в операторе подвыборки.

В следующей статье я подробно расскажу, как можно «использовать TOP вместе с предложением ORDER BY в операторе подвыборки».

ОБНОВЛЕНИЕ [2022-08-31]: «Будущая статья» можно найти здесь, КАК: Автоматизировать пакетное удаление записей SQL Server .

Заметка на прощание

Удаление миллионов записей — это не то, чем вы должны заниматься регулярно.

За последние пять лет мне пришлось сделать это ровно дважды в рабочей базе данных. В обоих случаях речь шла об автоматических приложениях ведения журналов, которые оказались в состоянии, когда они создавали избыточные данные журнала. Одним из них было приложение для мониторинга сети. Другим было приложение для мониторинга журнала событий Windows.

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


Статьи по ссылкам

КАК: Автоматизировать пакетное удаление записей SQL Server

Использование одной инструкции DELETE для удаления более 20 миллионов записей из SQL Server — плохая идея. Вот лучший подход.

Больше не задан Майк Вульф

Внешние ссылки

УДАЛИТЬ (Transact-SQL) — SQL Server

DEDETE (Transact-SQL)

Microsoft Docswilliamdassafmsft

Truncate Table (Transact-SQL)-SQL Server

Truncate Table (Transact-SQL)

Microsoft DocswilliamDassafmsft

Image с помощью Dinhoi Nguy Ngui NGUINABLIAMDABSFT

.

Как удалить записи в SQL Server с помощью Python

1 октября 2021 г.

В этом руководстве вы увидите, как удалять записи в SQL Server непосредственно из Python.

Вот шаги, которые вы можете выполнить.

Шаг 1. Установите библиотеку Pyodbc

Если вы еще этого не сделали, установите библиотеку pyodbc с помощью следующей команды (под Windows):

 pip install pyodbc
 

Шаг 2: подключение Python к SQL Server

Перед подключением Python к SQL Server можно получить несколько элементов, в том числе:

  • Имя сервера
  • Имя базы данных
  • Имя таблицы

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

  • Имя сервера: RON\SQLEXPRESS
  • Имя базы данных: test_database
  • Имя таблицы: продукт

Кроме того, таблица product содержит следующие данные:

product_id имя_продукта цена
1 Компьютер 800
2 ТВ 1200
3 Принтер 150
4 Стол 400
5 Стул 120
6 Планшет 300

Затем для нашего примера можно использовать следующий синтаксис для подключения Python к SQL Server (вы можете проверить следующее руководство для полных шагов по подключению Python к SQL Server):

 импорт pyodbc
conn = pyodbc. connect('Драйвер={SQL Server};'
                      'Сервер=RON\SQLEXPRESS;'
                      'База данных=test_database;'
                      'Trusted_Connection=да;')
 
курсор = соединение.курсор()

курсор.execute('ВЫБЕРИТЕ * ИЗ продукта')
 
для i в курсоре:
    печать (я)
 

После того, как вы запустите приведенный выше код в Python (с учетом информации о подключении к вашей базе данных), вы увидите следующие данные:

(1, «Компьютер», 800) (2, 'ТВ', 1200) (3, «Принтер», 150) (4, «Письменный стол», 400) (5, «Стул», 120) (6, «Планшет», 300)

Шаг 3. Удаление записей в SQL Server с помощью Python

Предположим, вы хотите удалить две последние записи из таблицы « product » (т. е. удалить запись «Chair», представленную product_id). из 5 и удалите запись «Планшет», представленную product_id из 6).

Вот полный код Python для удаления этих записей:

 import pyodbc
conn = pyodbc.
Оставить комментарий

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

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