Where from delete sql: DELETE (Transact-SQL) — SQL Server
Содержание
SQL DELETE — удаление данных из таблицы базы данных
Оглавление
Связанные темы
Оператор SQL DELETE предназначен для удаления данных из таблицы. Он имеет следующий синтаксис:
DELETE FROM ИМЯ_ТАБЛИЦЫ
WHERE УСЛОВИЕ
Если не указывать условие, из таблицы будут удалены все строки. Кроме того, следует помнить,
что могут быть удалены лишь строки с первичными ключами, на которые не ссылаются внешние ключи в других
таблицах (более подробно об ограничениях удаления — в уроке Реляционная модель данных).
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД
не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
А скрипт для создания базы данных «Портал объявлений 1», её таблицы и заполения таблицы данных —
в файле по этой ссылке.
Пример 1. Итак, есть база портала объявлений. В ней есть таблица Ads, содержащая
данные о объявлениях, поданных за неделю (более подробно — в уроке об агрегатных функциях SQL, пример 7).
Таблица выглядит так:
Id | Category | Part | Units | Money |
1 | Транспорт | Автомашины | 110 | 17600 |
2 | Недвижимость | Квартиры | 89 | 18690 |
3 | Недвижимость | Дачи | 57 | 11970 |
4 | Транспорт | Мотоциклы | 131 | 20960 |
5 | Стройматериалы | Доски | 68 | 7140 |
6 | Электротехника | Телевизоры | 127 | 8255 |
7 | Электротехника | Холодильники | 137 | 8905 |
8 | Стройматериалы | Регипс | 112 | 11760 |
9 | Досуг | Книги | 96 | 6240 |
10 | Недвижимость | Дома | 47 | 9870 |
11 | Досуг | Музыка | 117 | 7605 |
12 | Досуг | Игры | 41 | 2665 |
Требуется удалить из таблицы строку, имеющую идентификатор 4. Для этого
пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
DELETE FROM ADS
WHERE Id=4
Пример 2. Можно удалить и несколько строк, если в условии применить
оператор сравнения «больше» или «меньше» (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
DELETE FROM ADS
WHERE Id>4
В результате в таблице останутся лишь следующие строки:
Id | Category | Part | Units | Money |
5 | Стройматериалы | Доски | 68 | 7140 |
6 | Электротехника | Телевизоры | 127 | 8255 |
7 | Электротехника | Холодильники | 137 | 8905 |
8 | Стройматериалы | Регипс | 112 | 11760 |
9 | Досуг | Книги | 96 | 6240 |
10 | Недвижимость | Дома | 47 | 9870 |
11 | Досуг | Музыка | 117 | 7605 |
12 | Досуг | Игры | 41 | 2665 |
Пример 3. Аналогично можно удалять строки с заданными значениями
любого столбца. Удалим, например, строки об объявлениях, за которые выручено менее 10000 денежных единиц
(запрос на MS SQL Server — с предваряющей конструкцией USE adportal1;):
DELETE FROM ADS
WHERE Money
В результате в таблице останутся лишь следующие строки:
Id | Category | Part | Units | Money |
1 | Транспорт | Автомашины | 110 | 17600 |
2 | Недвижимость | Квартиры | 89 | 18690 |
3 | Недвижимость | Дачи | 57 | 11970 |
4 | Транспорт | Мотоциклы | 131 | 20960 |
8 | Стройматериалы | Регипс | 112 | 11760 |
Для удаления всех строк из таблицы применяется оператор SQL DELETE без условий, заданных в секции WHERE и
без любых других ограничей и условий, например, диапазона удаляемых строк. Таким образом, для удаления
всех строк синтаксис оператора DELETE будет следующим (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
DELETE FROM ИМЯ_ТАБЛИЦЫ
Пример 4. Чтобы удалить все данные из таблицы ADS, достаточно
написать следующий запрос:
DELETE FROM ADS
Если после выполнения этого запроса обратиться к таблице ADS при помощи оператора
SELECT, применяемого для получения выборки данных, то будет выведено сообщение о том, что эта
таблица не содержит данных.
Оператору DELETE без условий и ограничений аналогичен оператор TRUNCATE TABLE. Он
также удаляет из таблицы все строки, но выполняется намного быстрее.
Пример 5. Запрос на удаление всех данных из таблицы ADS
при помощи оператора TRUNCATE TABLE будет следующим (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
TRUNCATE TABLE ADS
Примеры запросов к базе данных «Портал объявлений-1» есть также в уроках об
операторах INSERT, UPDATE, HAVING и UNION.
Поделиться с друзьями
Команда DELETE — Язык запросов SQL
Команда DELETE
Команда DELETE удаляет строки из таблицы или представления основной таблицы базы данных, например, в MySQL, Oracle.
Команда DELETE. Синтаксис команды DELETE
Синтаксис команды DELETE
Команда DELETE. Основные ключевые слова и параметры команды DELETE
- schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
- table view — имя таблицы, из которой удаляются строки; если определяется представление, сервер удаляет строки из основной таблицы представления
- subquery — подзапрос, с помощью которого выбираются строки для удаления; сервер выполняет подзапрос и использует строки его результата как таблицу фразы FROM
- WHERE — удаляет только строки, которые удовлетворяют условию; условие может ссылаться на таблицу и содержать подзапрос.
При выдаче утверждения DELETE включается любой DELETE-триггер, определенный на таблице.
Команда DELETE Пример №1
Удаление всех строк из таблицы:
DELETE FROM temp_assign;
В данном примере команда DELETE удаляет все строки без исключения.
Команда DELETE Пример №2.
Удаляет из таблицы всех продавцов, у которых комиссионные меньше 100 у.е. в месяц:
DELETE FROM emp WHERE JOB = ‘SALESMAN’ AND COMM < 100;
В данном примере команда DELETE удаляет все строки, которые попадают под условие JOB = ‘SALESMAN’ AND COMM < 100;
Команда DELETE Пример №3
Предыдущий пример можно записать по-другому:
DELETE FROM (select * from emp) WHERE job = ‘SALESMAN’ AND comm < 100;
Для удаления всех записей в MySQL можно использовать следующую команду DELETE:
DELETE * FROM table_nam;
SQL — запрос DELETE
Запрос DELETE используется для удаления существующих записей из таблицы.
Вы можете использовать запрос WHERE с DELETE, чтобы удалить выбранные строки, в противном случае все записи будут удалены.
Синтаксис:
Базовый синтаксис DELETE запроса с WHERE выглядит следующим образом:
DELETE FROM table_name WHERE [condition];
Вы можете объединить N число условий с помощью операторов AND или OR.
Пример:
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+
Ниже приведен пример, который бы удалил из таблицы CUSTOMERS строку, идентификатор равной 6:
SQL> DELETE FROM CUSTOMERS WHERE ID = 6;
Теперь таблица CUSTOMERS будет иметь следующие записи:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+
Если вы хотите УДАЛИТЬ все записи из таблицы CUSTOMERS, вам не нужно использовать WHERE и запрос DELETE будет выглядеть следующим образом:
SQL> DELETE FROM CUSTOMERS;
Теперь таблица КЛИЕНТОВ не будет иметь никаких записей.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
База Данных MySQL Инструкция DELETE удаления
Инструкция SQL DELETE
Инструкция DELETE используется для удаления существующих записей в таблице.
DELETE Синтаксис
DELETE FROM table_name
WHERE condition;
Примечание: Будьте внимательны при удалении записей в таблице! Обратите внимание на предложение WHERE в инструкции DELETE.
Предложение WHERE указывает, какие записи должны быть удалены. Если опустить предложение WHERE, все записи в таблице будут удалены!
Демонстрационная база данных
Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Пример удаления SQL
Следующая инструкция SQL удаляет клиента «альфредс футтеркисте» из таблицы «клиенты»:
Пример
DELETE FROM Customers
WHERE CustomerName=’Alfreds Futterkiste’;
Таблица «Customers» теперь будет выглядеть так:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Удалить все записи
Можно удалить все строки в таблице без удаления таблицы. Это означает, что структура таблицы, атрибуты и индексы будут нетронутыми:
Или:
DELETE * FROM table_name;
Оператор SQL DELETE
Оператор SQL DELETE
Оператор DELETE
используется для удаления существующих записей в таблице.
УДАЛИТЬ Синтаксис
УДАЛИТЬ ИЗ имя_таблицы ГДЕ условие ;
Примечание: Будьте осторожны при удалении записей в таблице! Обратите внимание на
в
Предложение WHERE
DELETE
выписка.
Предложение WHERE
определяет, какие записи следует удалить.Если
если опустить предложение WHERE
, все записи в таблице будут удалены!
Демо-база данных
Ниже представлен выбор из таблицы «Клиенты» в примере Northwind.
база данных:
Идентификатор клиента | Имя клиента | ContactName | Адрес | Город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Альфредс Футтеркисте | Мария Андерс | Обере, ул.57 | Берлин | 12209 | Германия |
2 | Ana Trujillo Emparedados y helados | Ана Трухильо | Avda. de la Constitución 2222 | México D.F. | 05021 | Мексика |
3 | Антонио Морено Такерия | Антонио Морено | Матадерос 2312 | México D.F. | 05023 | Мексика |
4 | Вокруг Рога | Томас Харди | 120 Ганновер пл. | Лондон | WA1 1DP | Великобритания |
5 | Berglunds snabbköp | Кристина Берглунд | Berguvsvägen 8 | Лулео | С-958 22 | Швеция |
Пример SQL DELETE
Следующий оператор SQL удаляет клиента «Alfreds Futterkiste» из
Таблица «Покупатели»:
Пример
УДАЛИТЬ ОТ клиентов
ГДЕ CustomerName = ‘Альфред Футтеркисте’;
Попробуй сам »
Таблица «Клиенты» теперь будет выглядеть так:
Идентификатор клиента | Имя клиента | ContactName | Адрес | Город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
2 | Ana Trujillo Emparedados y helados | Ана Трухильо | Avda.de la Constitución 2222 | México D.F. | 05021 | Мексика |
3 | Антонио Морено Такерия | Антонио Морено | Матадерос 2312 | México D.F. | 05023 | Мексика |
4 | Вокруг Рога | Томас Харди | 120 Ганновер пл. | Лондон | WA1 1DP | Великобритания |
5 | Berglunds snabbköp | Кристина Берглунд | Berguvsvägen 8 | Лулео | С-958 22 | Швеция |
Удалить все записи
Можно удалить все строки в таблице, не удаляя таблицу.Этот
означает, что структура таблицы, атрибуты и индексы останутся без изменений:
Следующий оператор SQL удаляет все строки в таблице «Клиенты»,
без удаления таблицы:
SQL Server DELETE — удаление одной или нескольких строк из таблицы
Сводка : в этом руководстве вы узнаете, как использовать оператор SQL Server DELETE
для удаления одной или нескольких строк из таблицы.
Введение в SQL Server
Оператор DELETE
Чтобы полностью удалить одну или несколько строк из таблицы, используйте оператор DELETE
.Следующее иллюстрирует его синтаксис:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE [TOP (выражение) [PERCENT]] FROM table_name [WHERE search_condition];
Сначала вы указываете имя таблицы, из которой должны быть удалены строки, в предложении FROM
.
Например, следующий оператор удалит все строки из target_table
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE FROM target_table;
Во-вторых, чтобы указать количество или процент случайных строк, которые будут удалены, вы используете предложение TOP
.
Например, следующий оператор DELETE
удаляет 10 случайных строк из target_table
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE TOP 10 FROM target_table;
Поскольку таблица хранит свои строки в неопределенном порядке, мы не знаем, какие строки будут удалены, но мы точно знаем, что количество строк будет удалено равно 10.
Точно так же вы можете удалить 10 процентов случайных строк, используя следующий оператор DELETE
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE TOP 10 PERCENT FROM target_table;
В-третьих, практически говоря, вы редко удаляете все строки из таблицы, а только одну или несколько строк.В этом случае вам необходимо указать search_condition
в предложении WHERE
, чтобы ограничить количество удаляемых строк.
Строки, из-за которых search_condition
оценивается как истинное, будут удалены.
Предложение WHERE
является необязательным. Если вы его пропустите, оператор DELETE
удалит все строки из таблицы.
SQL Server
DELETE
Примеры операторов
Давайте создадим новую таблицу для демонстрации.
Следующий оператор создает таблицу с именем production.product_history
с данными, скопированными из таблицы production.products
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT * INTO production.product_history ИЗ production.products;
Следующий запрос возвращает все строки из таблицы product_history
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT * FROM production.product_history;
Как ясно видно из выходных данных, всего у нас 321 строка.
1) Удалить количество случайных строк, пример
Следующий оператор DELETE
удаляет 21 случайную строку из таблицы product_history
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE TOP (21) ИЗ production.product_history;
Вот сообщение, выданное SQL Server:
Язык кода: SQL (язык структурированных запросов) (sql)
(затронута 21 строка)
Это означает, что 21 строка была удалена.
2) Удалить процент случайных строк, пример
Следующий оператор DELETE
удаляет 5 процентов случайных строк из таблицы product_history
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE TOP (5) PERCENT ИЗ production.product_history;
SQL Server выдал следующее сообщение, указывающее, что 15 строк (300 x 5% = 15) были удалены.
Язык кода: SQL (язык структурированных запросов) (sql)
(затронуто 15 рядов)
3) Удалить некоторые строки с примером условия
Следующий оператор DELETE
удаляет все продукты с модельным годом 2017:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE ИЗ производство.product_history КУДА model_year = 2017;
Вот выходное сообщение:
Язык кода: SQL (язык структурированных запросов) (sql)
(затронуто 75 строк)
4) Удалить все строки из примера таблицы
Следующий оператор DELETE
удаляет все строки из таблицы product_history
:
Язык кода: SQL (язык структурированных запросов) (sql)
DELETE ОТ ПРОИЗВОДСТВА.product_history;
Обратите внимание, что если вы хотите удалить все строки из большой таблицы, вы должны использовать оператор TRUNCATE TABLE
, который работает быстрее и эффективнее.
В этом руководстве вы узнали, как использовать оператор SQL Server DELETE
для удаления одной или нескольких строк из таблицы.
SQL | Оператор DELETE — GeeksforGeeks
Оператор DELETE в SQL используется для удаления существующих записей из таблицы.Мы можем удалить одну запись или несколько записей в зависимости от условия, которое мы указываем в предложении WHERE.
Базовый синтаксис:
Вниманию читателя! Не прекращайте учиться сейчас. Изучите SQL для собеседований с помощью курса SQL от GeeksforGeeks.
УДАЛИТЬ ИЗ имя_таблицы ГДЕ некоторое_условие; table_name : имя таблицы some_condition : условие выбора конкретной записи.
Примечание: Мы можем удалить как отдельные, так и несколько записей в зависимости от условия, указанного в предложении WHERE.Если мы опустим предложение WHERE, все записи будут удалены, а таблица будет пустой.
Образец таблицы:
Примеры запросов:
- Удаление отдельной записи : Удалите строки, в которых ИМЯ = «Ram». Это удалит только первую строку.
УДАЛИТЬ ОТ ученика, ГДЕ ИМЯ = «Баран»;
Вывод:
Приведенный выше запрос удалит только первую строку, и таблица Студент теперь будет выглядеть так:ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст 2 RAMESH GURGAON XXXXXXXXXX 18 3 SUJIT ROHTAK XXXXXXXXXX Дели XXXXXXXXXX 18 3 SUJIT ROHTAK XXXXXXXXXX 20 2 RAMESH GURGAON XXXXXX52 905 GURGAON XXXXXX52 9050 несколько записей : удалить строки из таблицы e Учащийся 20 лет.Это удалит 2 строки (третья строка и пятая строка). УДАЛИТЬ ОТ ученика ГДЕ Возраст = 20;
Вывод:
Приведенный выше запрос удалит две строки (третья строка и пятая строка), и таблица Student теперь будет выглядеть так:ROLL_NO NAME ADDRESS ТЕЛЕФОН Возраст 1 Оперативная память Дели XXXXXXXXX 18 2 RAMESH GURGAON XXXXXXX35 XXXXXXX 4 SURESH Delhi XXXXXXXXXX 18 2 RAMESH GURGAON XXXXXXXXXX 18 - Удалить все записи это, как показано ниже,
query1: «УДАЛИТЬ ОТ ученика»; query2: «УДАЛИТЬ * ОТ ученика»;
Вывод:
Все записи в таблице будут удалены, не останется записей для отображения.Стол Студент станет пустым!SQL Quiz
Эта статья предоставлена Harsh Agarwal . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя write.geeksforgeeks.org, или отправить свою статью по адресу [email protected]. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарий, если вы обнаружите что-то неправильное, или если вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.
SQL DELETE — удаление данных в таблице или нескольких таблицах
Сводка : в этом руководстве вы узнаете, как использовать оператор SQL DELETE для удаления одной или нескольких строк в таблице.
Оператор
DELETE
навсегда удаляет одну или несколько строк из таблицы. Синтаксис оператораDELETE
следующий:DELETE FROM table КУДА состояние;
Чтобы удалить одну или несколько строк в таблице:
- Сначала вы указываете имя таблицы, из которой вы хотите удалить данные, в предложении
DELETE FROM
. - Во-вторых, вы помещаете условие в предложение WHERE, чтобы указать, какие строки следует удалить. Если вы опустите предложение
WHERE
, оператор удалит все строки в таблице.
Если вы хотите удалить все строки в большой таблице, вы должны использовать оператор TRUNCATE TABLE, который более эффективен, чем оператор
DELETE
.Примеры SQL DELETE
Давайте рассмотрим несколько примеров использования оператора DELETE.
SQL DELETE — удаление одной строки в таблице
Следующий оператор удаляет сотрудника с идентификатором 3 из таблицы
сотрудников
:УДАЛИТЬ ИЗ сотрудников ГДЕ employeeID = 3;
SQL DELETE — удаление всех строк в таблице
Чтобы удалить все строки в таблице
employee
, вы просто выполните следующий запрос: (не рекомендуется и сделайте резервную копию перед этим)DELETE ОТ сотрудников;
SQL DELETE — удаление связанных строк в нескольких таблицах
Это становится более сложным, когда вы хотите удалить строку в таблице, которая связана с другими строками в другой таблице.
Например, каждый сотрудник работает на одной или нескольких территориях, и на каждой территории есть несколько сотрудников. Таблица
территорий сотрудников
используется для хранения отношений между сотрудниками и территориями.При удалении строки в таблице
сотрудников
необходимо также удалить связанные строки в таблицетерриторий сотрудников
. Для этого необходимо выполнить два оператораDELETE
следующим образом:DELETE FROM сотрудников ГДЕ employeeID = 3;
УДАЛИТЬ С территории сотрудников WHERE employeeID = 3
Большинство систем управления базами данных позволяют создавать ограничение внешнего ключа, чтобы при удалении строки в таблице соответствующие строки из связанной таблицы также удалялись автоматически.Это гарантирует целостность данных. В этом случае вам просто нужно выполнить первый оператор
DELETE
только для удаления строк в двух таблицах.В случае, если система управления базой данных не поддерживает ограничение внешнего ключа, вы должны выполнить оба оператора
DELETE
в одной транзакции, чтобы убедиться, что операторы выполняются в режиме «все или ничего».В этом руководстве мы показали вам, как использовать оператор SQL
DELETE
для удаления одной или нескольких строк в таблице.Обзор оператора SQL Delete
Эта статья об удалении SQL является частью серии статей, посвященных ключевым операторам, функциям и операциям SQL Server.
Удаление строки из таблицы выполняется с помощью языка манипулирования данными, также известного как оператор DML, с использованием ключевого слова delete. Операция удаления SQL — самая простая из всех команд DML. При выполнении команды удаления нам не нужно беспокоиться о получении каких-либо данных из таблицы, и нам не нужно беспокоиться о работе с любыми данными, которые мы получаем обратно из таблицы (таблиц).Мы просто говорим базе данных удалить определенную запись, и она либо удаляет, либо нет. Это так просто.
Во-первых, давайте быстро рассмотрим, как выглядит оператор удаления SQL. Нам нужно указать базе данных и таблице, откуда следует удалять данные. Рекомендуется добавить условие, чтобы задать объем удаления данных. В противном случае он удалит все в таблице.
Давайте взглянем на нашу таблицу и удалим несколько записей.
Как удалить строки без пункта
В следующем примере удаляет все строки из таблицы Person.Person в базе данных AdventureWorks2014. Для инструкции удаления SQL с использованием предложения WHERE нет никаких ограничений.
ЕГЭ Adventureworks2014;
GO
УДАЛИТЬ ОТ [Лицо]. [Лицо];
Как удалить строки с предложением where
В следующем примере удаляются строки из [Person].[Person] таблица в базе данных AdventureWorks2014, в которой значение в столбце businessEntityID больше 30 000
ЕГЭ Adventureworks2014;
GO
УДАЛИТЬ ОТ [Лицо]. [Лицо]
ГДЕ businessEntityID> 30000;
Примечание. Прискорбная ошибка, которая может произойти, состоит в том, чтобы случайно запустить SQL Delete без предложения Where и непреднамеренно удалить все ваши данные.Чтобы этого не произошло, рассмотрите возможность использования функции защиты выполнения в ApexSQL Complete, чтобы предупредить о таких потенциально опасных действиях, прежде чем выполнять их. Подробнее: Предупреждения о выполнении
Как удалить строки с помощью Top с предложением where
В следующем примере удаляется 50 случайных строк из таблицы Person.Person в базе данных AdventureWorks2014. Значение BusinessEntityID должно находиться в диапазоне от 30 000 до 40 000.
ЕГЭ Adventureworks2014;
GO
УДАЛИТЬ ВЕРХНЮЮ (50) ОТ [Человек].[Человек]
ГДЕ BusinessEntityID между 30000 и 40000
Примечание: когда предложение TOP (n) используется с оператором SQL Delete и любым оператором DML (например, Select, Insert, Delete и Update), операция выполняется для случайного выбора ряда строк, указанных в предложении Top. .
Как удалить повторяющиеся строки
В реальном мире мы обычно собираем данные из разных источников; нередко встречаются повторяющиеся записи.Один из подходов к проблеме дублирования — сначала определить, где возникли дубликаты. И запустите запрос выбора для этих столбцов.
EATE TABLE tb_spaceused
(имя_базы_данных NVARCHAR (128),
database_size VARCHAR (18),
[незанятое пространство] VARCHAR (18),
зарезервировано VARCHAR (18),
данных VARCHAR (18),
данных VARCHAR
index_size VARCHAR (18),
неиспользуемый VARCHAR (18)
);
INSERT INTO tb_spaceused
EXEC sp_msforeachdb
@ command1 = «использовать? Exec sp_spaceused @oneresultset = 1»;
ВЫБРАТЬ *
FROM tb_spaceused
заказать по имени_базы_данных
В следующем примере аргумент PARTITION BY используется для разделения набора результатов запроса по всем столбцам таблицы tb_spaceused .Row_Number (), оконная функция, что означает, что она работает с упорядоченным набором. Предложение ORDER BY, указанное в предложении OVER, упорядочивает строки в каждой секции по всем столбцам таблицы tb_spaceused.
С CTE
AS (SELECT *,
ROW_NUMBER () OVER (РАЗДЕЛ ПО имя_базы_данных,
размер_базы_данных,
[незанятое пространство],
зарезервировано,
данных,
неиспользуемый размер_индекса
ORDER BY имя_базы_данных
) AS Row_Num
FROM tb_spaceused)
SELECT *
FROM CTE
WHERE Row_Num <> 1;
Замена оператора Select оператором Delete удаляет все дубликаты таблицы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
14
WITH CTE
AS (SELECT *,
ROW_NUMBER () OVER (РАЗДЕЛ ПО имя_базы_данных,
размер_базы_данных,
[незанятое пространство],
зарезервировано,
данных,
неиспользуемый размер_индекса
ORDER BY имя_базы_данных
) AS Row_Num
FROM tb_spaceused)
—SELECT *
—FROM CTE
—WHERE Row_Num <> 1;
УДАЛИТЬ ИЗ CTE
ГДЕ Row_Num <> 1;
Как удалить строки с помощью подзапросов SQL
В следующем примере строки в одной таблице удаляются на основе данных в другой таблице.В примерах строки из таблицы SalesPersonQuotaHistory удаляются на основе столбца SalesYTD таблицы SalesPerson.
УДАЛИТЬ ИЗ Sales.SalesPersonQuotaHistory
ГДЕ BusinessEntityID IN
(
ВЫБРАТЬ BusinessEntityID
ИЗ Sales.SalesPerson
ГДЕ SalesYTD> 4
0.00
);
ГО
Как удалить строки с помощью SQL-соединений
В этом разделе мы будем использовать оператор SQL Delete для удаления данных из базы данных Adeventureworks2014.Удаление данных на первый взгляд кажется тривиальным, но как только мы перейдем к проектированию большой базы данных, все может быть не таким простым и простым.
Во многих случаях таблицы связаны через отношения первичного и внешнего ключей. В следующем примере мы можем увидеть использование объединений для удаления данных из Sales.SalesPersonQuotaHistory.
УДАЛИТЬ sq
ИЗ Sales.SalesPersonQuotaHistory sq
INNER JOIN Sales.SalesPerson sp ON sq.BusinessEntityID = sp.BusinessEntityID
ГДЕ sp.SalesYTD> 4500000.00;
ГО
Как удалить строки из удаленной таблицы с помощью связанных серверов и OpenQuery
В следующем примере оператор SQL delete используется для удаления строк из удаленной таблицы с использованием связанного сервера с именем hqdbt01. Затем запросите удаленную таблицу, используя четырехкомпонентное соглашение об именах объектов, чтобы удалить строки из удаленной таблицы.
УДАЛИТЬ
ИЗ [hqdbt01].AdventureWorks2014. [HumanResources]. [Shift]
ГДЕ ShiftID = 2;
В следующем примере удаленная таблица запрашивается путем указания функции набора строк OPENQUERY вместе с командой удаления.
УДАЛИТЬ ОТКРЫТЫЙ ЗАПРОС (hqdbt01, ‘SELECT *
FROM AdventureWorks2014.HumanResources.Department
WHERE DepartmentID = 18′);
Как удалить строки с помощью SSMS
Использование SQL Server Management Studio (SSMS) и графического интерфейса пользователя (GUI) для удаления строк предполагает ручной поиск.На самом деле удалить записи с помощью SQL-запроса будет намного проще и быстрее.
Давайте продолжим и найдем таблицу для использования оператора удаления SQL, в данном случае выбрана таблица dbo.cities . Теперь щелкните правой кнопкой мыши и выберите Редактировать первые 200 строк . Эта опция открывает окно конструктора запросов. Затем щелкните окно правой кнопкой мыши и выберите Execute SQL и напишите новый запрос, который удалит строки из таблицы dbo.cities.
В области результатов убедитесь, что инструкция SELECT извлекает правильные целевые записи, прежде чем начинать удаление строк.Выделите строки, щелкните их правой кнопкой мыши и выберите Удалить , чтобы удалить строки из таблицы.
Сводка
До сих пор мы видели много разных способов использования SQL-оператора delete для удаления данных. Но есть список соображений, которые необходимо учитывать при использовании оператора удаления, и он выглядит следующим образом:
- Всегда рекомендуется начинать с оператора SELECT, прежде чем что-либо удалять, чтобы убедиться, что вы выбираете правильные записи.Таким образом, оператор delete используется для удаления строк из таблицы с использованием предложения where для выбора только удаляемых строк.
- Всегда используйте уникальный идентификатор для поиска строк, которые нужно удалить.
- Чтобы удалить все строки в таблице, всегда используйте TRUNCATE TABLE. TRUNCATE TABLE, который работает быстрее, чем оператор удаления SQL, и использует меньше ресурсов системы и журнала транзакций.
- По умолчанию операторы DELETE вызывают эксклюзивную (X) блокировку таблицы, и она удерживает блокировку до завершения транзакции.
- Исключительная блокировка предотвращает изменение данных другой транзакцией; операции чтения разрешены с использованием подсказки NOLOCK или уровня изоляции чтения незафиксированных
- Рекомендуется указывать подсказку TABLOCK в операторе удаления.Этот процесс позволяет освободить страницу и связанное с ней пространство, доступное для повторного использования другими объектами в базе данных.
- Перед выполнением оператора удаления рекомендуется создать кластеризованный индекс в таблице кучи.
- Хотя это очень просто и очень мощно, и результат оператора Delete разрушителен. Удаленные строки не могут быть легко восстановлены
Примечание. Чтобы восстановить удаленные строки, см. Раздел «Аварийное восстановление SQL Server» — «Как быстро восстановить данные, потерянные из-за операции непреднамеренного удаления»
На этом пока все … Надеюсь, вам понравится эта статья об операторе удаления SQL.Если у вас есть какие-либо вопросы, не стесняйтесь комментировать ниже.
Я технолог по базам данных с более чем 11-летним богатым практическим опытом работы с технологиями баз данных. Я сертифицированный специалист Microsoft и имею степень магистра компьютерных приложений.
Моя специальность заключается в разработке и внедрении решений высокой доступности и кроссплатформенной миграции БД. В настоящее время работают над технологиями SQL Server, PowerShell, Oracle и MongoDB.
Посмотреть все сообщения от Prashanth Jayaram
Последние сообщения от Prashanth Jayaram (посмотреть все)
Оператор удаления строки SQL — Как удалить данные из таблицы с примерами запросов
Я не сомневаюсь, насколько мне нравится работать с SQL как в моих профессиональных, так и в личных проектах.
Его прямолинейность и простота апеллируют к моему желанию иметь четко определенные границы с точки зрения того, что язык будет и не позволит мне «уйти с рук» в отношении синтаксиса.
SQL имеет четкую и лаконичную структуру операций, при которой вводимые пользователем данные диктуются возвращаемыми данными. Отсюда мой комментарий о четко определенных границах синтаксиса.
Хотя я отмечаю его отказоустойчивость (SQL был создан в 1974 г. с первоначальной версией 1986 г.) в сообществе разработчиков, я также знаю, что при работе с данными может казаться, что даже основы могут вызывать стресс и пугать.
Я здесь, чтобы (надеюсь) пролить свет на один из основных принципов работы с данными: удаление всей строки данных.
Хотя мы не собираемся подробно описывать процесс создания таблицы в SQL или заполнения этой таблицы данными / обновления этих данных, я связал эти другие статьи на случай, если вы хотите узнать больше или просто нуждаетесь в освежить.
Хорошо, теперь самое интересное — приступим к удалению данных из таблицы!
Обзор строки удаления SQL
Вот таблица с метким названием Cute_Doggos , которую мы будем использовать в качестве примера для начала удаления данных из:
Имя Цвет Порода Возраст Вес Высота Fav_Food Игрушка Fav_Toy Дизлайки Аллергия ромашка красный Такса стандартная 1 год 14 6 Кусок со вкусом лосося скрипучий мяч птицы летают над двором кошки, бани, чистота Уинстон черный / коричневый ротвейлер 3 года 41 17 буквально все, что угодно буксир не вставать с дивана слушает, ведет себя, не слюнявит на всем Сэмми светлый мед золотистый ретривер 9 лет 46 19 Кусочки со вкусом говядины ее кровать безумных щенков неизвестно пенелопа серый и белый хаски 9 месяцев 16 12 старые туфли снаружи питомник неизвестно Как вы уже догадались, это фиктивные данные из таблицы, которую я придумал из воздуха 🙂 Однако я надеюсь, что она достаточно хорошо иллюстрирует данные для наших целей.
Как и в большинстве случаев технического характера, также никогда не помешает проверить официальную документацию. Если вы хотите это сделать, у Microsoft есть отличная подробная информация об операторе SQL Delete.
В основе статьи — удаление данных. Действие так же просто, как само имя, и вот его базовый синтаксис:
УДАЛИТЬ ИЗ имя_таблицы
*** С помощью этого синтаксиса вы удалите все строки данных во всей таблице. ***
Итак, для В приведенной выше таблице в качестве примера запрос будет выглядеть следующим образом:
DELETE FROM Cute_Doggos
Это может быть ваша предполагаемая цель, и чем дольше вы пишете SQL, тем больше случаев вы найдете для использования оператора удаления в этом качестве.
Я использовал этот оператор много раз, чтобы очистить таблицу после того, как она была заполнена тестовыми данными. Такой подход позволяет нам поддерживать имена столбцов, типы данных, индексы и общую структуру таблицы в такт, не удаляя саму таблицу.
В качестве примечания: если ваша предполагаемая цель — удалить все строки в таблице, более быстрым подходом будет использование оператора TRUNCATE TABLE, поскольку он использует гораздо меньше системных ресурсов.
Пример запросов на удаление
В подавляющем большинстве случаев, когда вы используете функцию удаления, вы захотите, чтобы ваш подход был более целенаправленным.Для этого мы добавим условие, и синтаксис будет выглядеть так:
DELETE FROM name_of_table WHERE conditions_exist
Используя нашу таблицу собак выше, наш запрос будет выглядеть так:
DELETE FROM Cute_Doggos WHERE dbo.Cute_Doggos.Height> 18
Это приведет к удалению всех записей из нашей таблицы, которые соответствуют нашему условию, когда высота больше 18 . А если вы используете Microsoft SQL Server Manager, вы получите такой оператор возврата:
(затронута 1 строка)
Если вы хотите увидеть строки данных, которые были удалены (для целей ведения журнала , визуальные указания для пользователей и т. д.), мы можем использовать оператор OUTPUT , чтобы сделать именно это.
Наша таблица теперь будет выглядеть так:
Имя Цвет Порода Возраст Вес Высота Fav_Food Игрушка Fav_Toy Дизлайки Аллергия ромашка красный Такса стандартная 1 год 14 6 Кусок со вкусом лосося скрипучий мяч птицы летают над двором кошки, бани, чистота Уинстон черный / коричневый ротвейлер 3 года 41 17 буквально все, что угодно буксир не вставать с дивана слушает, ведет себя, не слюнявит на всем пенелопа серый и белый хаски 9 месяцев 16 12 старые туфли снаружи питомник неизвестно Условия, которые мы устанавливаем, полностью наш выбор, и если они слишком узкие для ваших нужд, есть другие варианты.
Допустим, вас не интересуют конкретные удаляемые записи, а только то, что вам нужно удалить определенное количество записей в таблице.
DELETE TOP 2 FROM Cute_Doggos
Вы могли подумать, что этот запрос удалит самые первые две записи в вашей таблице — и вы не так уж далеко. Единственная проблема заключается в том, что поскольку SQL хранит записи в случайном порядке, этот синтаксис удалит из таблицы 2 RANDOM записей.
Если вы хотите удалить процент записей, SQL также может это сделать:
УДАЛИТЬ ТОП 25 ПРОЦЕНТОВ ИЗ Cute_Doggos
Опять же, этот запрос удалит RANDOM записей.В нашем примере, поскольку у нас есть 4 записи, этот запрос удалит 1 случайную запись (4 * 0,25 = 1).
В качестве последнего примечания, при использовании ключевого слова TOP мы не можем использовать предложение ORDER BY из-за случайности хранения записей.
Завершение
Теперь, когда вы увидели оператор DELETE в действии, вы готовы выйти на улицу и извлечь все данные из всех таблиц! Может быть, не делайте этого, так как восстановление из резервных копий займет у вас долгие выходные 🙂
В любом случае, теперь вы готовы начать использовать его с пользой.
Если вы нашли эту статью полезной, загляните в мой блог (в настоящее время я перестраиваю его в Gatsby / WordPress, так что ждите статьи об этом), где я часто публикую статьи о веб-разработке, жизни и обучении.
Пока вы там, почему бы не подписаться на мою рассылку новостей? Вы можете сделать это в правом верхнем углу главной страницы блога. Мне нравится присылать интересные статьи (свои и другие), ресурсы и инструменты для разработчиков время от времени.
Если у вас есть вопросы по этой статье или просто дайте мне знать — приходите поздороваться в Twitter или в любой из моих других социальных сетей, которые вы можете найти под рассылкой новостей, подпишитесь на главной странице моего блога или в моем профиле здесь, на freeCodeCamp 🙂
Хорошего дня! Удачного обучения и удачного программирования, друг.
MySQL :: Справочное руководство MySQL 8.0 :: 13.2.2 Оператор DELETE
DELETE
— это оператор DML,
удаляет строки из таблицы.Оператор
DELETE
может начинаться с
С предложением
для определения общей таблицы
выражения, доступные в
УДАЛИТЬ
. См. Раздел 13.2.15, «WITH (общие табличные выражения)».Однотабличный синтаксис
УДАЛИТЬ [LOW_PRIORITY] [QUICK] [IGNORE] FROM имя_таблицы [[AS] псевдоним_таблицы ] [РАЗДЕЛ ( имя_раздела [, имя_раздела ])...)] [WHERE where_condition ] [СОРТИРОВАТЬ ПО ...] [LIMIT row_count ]
Оператор
DELETE
удаляет строки из
tbl_name
и возвращает количество
удаленные строки. Чтобы проверить количество удаленных строк, вызовите
ROW_COUNT ()
функция, описанная в
Раздел 12.16, «Информационные функции».Основные статьи
Условия в дополнительном пункте
WHERE
определить, какие строки нужно удалить.БезГДЕ
предложение, все строки удаляются.где_условие
— выражение, которое
оценивается как истина для каждой удаляемой строки. Он указан как
описано в Раздел 13.2.10, «Оператор SELECT».Если указано предложение
ORDER BY
, строки
удаляются в указанном порядке. В
LIMIT Пункт
устанавливает ограничение на количество
строки, которые можно удалить.Эти пункты применяются к одиночным таблицам
удаляет, но не удаляет несколько таблиц.Синтаксис нескольких таблиц
УДАЛИТЬ [LOW_PRIORITY] [QUICK] [IGNORE] имя_таблицы [. *] [, имя_таблицы [. *]] ... ИЗ table_references [WHERE where_condition ] УДАЛИТЬ [LOW_PRIORITY] [QUICK] [IGNORE] FROM имя_таблицы [. *] [, имя_таблицы [. *]] ... ИСПОЛЬЗОВАНИЕ table_references [ГДЕ , где_условие ]
Привилегии
Вам нужна привилегия
DELETE
на
table, чтобы удалить из него строки.Вам нужно только
SELECT
привилегия для любых столбцов
которые только читаются, например, те, которые указаны в
ГДЕ
пункт.Производительность
Когда вам не нужно знать количество удаленных строк,
TRUNCATE TABLE
оператор является
более быстрый способ очистить стол, чем
DELETE
выписка без
ГДЕ
пункт. В отличие от
УДАЛИТЬ
,
TRUNCATE TABLE
не может быть использован
внутри транзакции или если у вас есть блокировка таблицы.Видеть
Раздел 13.1.37, «Оператор TRUNCATE TABLE» и
Раздел 13.3.6, «Операторы LOCK TABLES и UNLOCK TABLES».На скорость операций удаления также могут влиять факторы.
обсуждается в Раздел 8.2.5.3, «Оптимизация операторов DELETE».Чтобы гарантировать, что данный
УДАЛИТЬ
не занимает много времени, специфичный для MySQL
LIMIT
row_count
пункт дляDELETE
определяет
максимальное количество удаляемых строк.Если количество строк до
удаление превышает лимит, повторите
DELETE
до количества затронутых
строк меньше значенияLIMIT
.Подзапросы
Вы не можете удалить из таблицы и выбрать из той же таблицы в
подзапрос.Опора для разделенных таблиц
DELETE
поддерживает явный выбор раздела
используя предложениеPARTITION
, которое принимает список
разделенных запятыми имен одного или нескольких разделов или
подразделы (или оба), из которых можно выбрать строки для удаления.Разделы, не включенные в список, игнорируются. Учитывая
многораздельная таблицаt
с разделом с именем
p0
, выполнение оператораDELETE
оказывает такое же влияние на таблицу
FROM t PARTITION (p0)
как выполнениеALTER
; в обоих случаях все строки
ТАБЛИЦА t ОБРЕЗАТЬ РАЗДЕЛ (p0)
в разделесбрасываются p0
.РАЗДЕЛ
можно использовать вместе с
ГДЕ
условие, в этом случае условие
проверено только на строках в перечисленных разделах.Например,
УДАЛИТЬ ИЗ РАЗДЕЛА t (p0), ГДЕ c <5
удаляет строки только из разделаp0
, для которого
выполняется условиеc <5
; строк в любых
другие разделы не проверяются и, следовательно, на них не распространяется
УДАЛИТЬ
.Предложение
PARTITION
также может использоваться в
несколько таблицDELETE
операторов. Вы можете использовать
до одной такой опции для каждой таблицы, названной в
ИЗ
вариант.Для получения дополнительной информации и примеров см.
Раздел 24.5, «Выбор раздела».Столбцы с автоматическим приращением
Если вы удалите строку, содержащую максимальное значение для
AUTO_INCREMENT
столбец, значение не используется повторно
дляMyISAM
илиInnoDB
стол. Если вы удалите все строки в таблице с помощьюDELETE
(без
ИЗимя_таблицы
WHERE
clause) в
autocommit
mode, последовательность
запускается заново для всех механизмов хранения, кроме
InnoDB
иMyISAM
.Есть
некоторые исключения из этого поведения дляInnoDB
таблицы, как описано в
Раздел 15.6.1.6, «Обработка AUTO_INCREMENT в InnoDB».Для таблиц
MyISAM
можно указать
AUTO_INCREMENT
вторичный столбец в
ключ из нескольких столбцов. В этом случае повторное использование значений, удаленных из
начало последовательности встречается даже дляMyISAM
таблицы. См. Раздел 3.6.9, «Использование AUTO_INCREMENT».Модификаторы
Оператор
DELETE
поддерживает
следующие модификаторы:Если вы укажете модификатор
LOW_PRIORITY
,
сервер задерживает выполнение
УДАЛИТЬ
, пока не прекратятся другие клиенты
читаем из таблицы.Это влияет только на механизмы хранения.
которые используют только блокировку на уровне таблицы (например,
MyISAM
,ПАМЯТЬ
и
MERGE
).Для таблиц
MyISAM
, если вы используете
QUICK
модификатор, механизм хранения не работает.
индекс слияния уходит во время удаления, что может ускорить некоторые
виды операций удаления.Модификатор
IGNORE
заставляет MySQL игнорировать
игнорируемые ошибки в процессе удаления строк.(Ошибки
обнаруженные на этапе синтаксического анализа, обрабатываются в
обычным способом.) Ошибки, которые игнорируются из-за использования
IGNORE
возвращаются как предупреждения. Для большего
Для получения дополнительной информации см. «Влияние IGNORE на выполнение оператора».
Порядок исключения
Если оператор
DELETE
включает
ORDER BY
, строки удаляются в порядке
указанные в пункте. Это полезно в первую очередь в сочетании
сLIMIT
.Например, следующие
оператор находит строки, соответствующие предложениюWHERE
,
сортирует их поtimestamp_column
и удаляет
первый (самый старый):УДАЛИТЬ ИЗ somelog WHERE user = 'jcole' ORDER BY timestamp_column LIMIT 1;
ORDER BY
также помогает удалять строки в заказе
требуется, чтобы избежать нарушений ссылочной целостности.Таблицы InnoDB
Если вы удаляете много строк из большой таблицы, вы можете превысить
размер таблицы блокировок для таблицыInnoDB
.К
избежать этой проблемы или просто свести к минимуму время, в течение которого стол
остается заблокированным, следующая стратегия (которая не использует
DELETE
вообще) может быть полезно:Выберите строки , а не , которые нужно удалить в
пустая таблица, имеющая ту же структуру, что и исходная таблица:INSERT INTO t_copy SELECT * FROM t WHERE ...;
Используйте
RENAME TABLE
, чтобы атомарно
переместите исходную таблицу в сторону и переименуйте копию в
исходное название:ПЕРЕИМЕНОВАНИЕ ТАБЛИЦЫ t TO t_old, t_copy TO t;
Отбросьте исходную таблицу:
ТАБЛИЦА ПАДЕНИЯ t_old;
Никакие другие сеансы не могут получить доступ к задействованным таблицам, пока
RENAME TABLE
выполняется, поэтому
Операция переименования не вызывает проблем с параллелизмом.Видеть
Раздел 13.1.36, «Оператор RENAME TABLE».Таблицы MyISAM
В таблицах
MyISAM
удаленные строки сохраняются.
в связанном списке и последующих
INSERT
операций повторно используют старую строку
позиции. Чтобы освободить неиспользуемое пространство и уменьшить размер файлов, используйте
OPTIMIZE TABLE
заявление или
myisamchk Утилита для реорганизации таблиц.
ТАБЛИЦА ОПТИМИЗАЦИИ
проще в использовании,
но myisamchk быстрее.Видеть
Раздел 13.7.3.4, «Оператор OPTIMIZE TABLE» и Раздел 4.6.4, «myisamchk - Утилита обслуживания таблиц MyISAM».Модификатор
QUICK
влияет на то, покидает ли индекс
объединяются для операций удаления.УДАЛИТЬ БЫСТРО
наиболее полезен для приложений, в которых значения индекса для удаленных
строки заменяются аналогичными значениями индекса из вставленных строк
потом. В этом случае повторно используются дыры, оставленные удаленными значениями.БЫСТРОЕ УДАЛЕНИЕ
не используется при удалении значений
приводит к неполному заполнению индексных блоков, охватывающих диапазон значений индекса
для которых снова появляются новые вставки.В этом случае использование
QUICK
может привести к потере места в индексе
что остается невостребованным. Вот пример такого сценария:Создайте таблицу, содержащую индексированный
AUTO_INCREMENT
столбец.Вставьте много строк в таблицу. Каждая вставка приводит к
значение индекса, которое добавляется к верхнему пределу индекса.Удалить блок строк в нижнем конце диапазона столбцов
используяDELETE QUICK
.
В этом сценарии индексные блоки, связанные с удаленным
значения индекса становятся недозаполненными, но не объединяются с другими
index блоков за счет использованияQUICK
. Они
остаются не заполненными при новых вставках, потому что новые строки не
имеют значения индекса в удаленном диапазоне. Кроме того, они остаются
недостаточно заполнен, даже если вы позже воспользуетесь
DELETE
без
QUICK
, если только некоторые из удаленных значений индекса
оказываются в индексных блоках внутри или рядом с
недозаполненные блоки.Чтобы освободить неиспользуемое индексное пространство под этими
обстоятельства, используйтеOPTIMIZE TABLE
.Если вы собираетесь удалить много строк из таблицы, это может быть
быстрее использоватьУДАЛИТЬ БЫСТРО
с последующим
ТАБЛИЦА ОПТИМИЗАЦИИ
. Это восстанавливает
index вместо выполнения многих операций слияния блоков индекса.Удаление нескольких таблиц
Вы можете указать несколько таблиц в
DELETE
инструкция для удаления строк
из одной или нескольких таблиц в зависимости от условия в
ГДЕ
пункт.Вы не можете использоватьЗАКАЗАТЬ
или
BYLIMIT
в многостоловой
УДАЛИТЬ
. В
table_references
пункт перечисляет
таблицы, участвующие в объединении, как описано в
Раздел 13.2.10.2, «Пункт JOIN».Для первого синтаксиса с несколькими таблицами только соответствующие строки из
таблицы, перечисленные перед пунктомFROM
, являются
удалено. Для второго синтаксиса с несколькими таблицами только совпадающие строки
из таблиц, перечисленных в пунктеИЗ
(перед предложениемUSING
) удаляются.В
эффект заключается в том, что вы можете удалять строки из многих таблиц одновременно
time и есть дополнительные таблицы, которые используются только для поиска:УДАЛИТЬ t1, t2 ИЗ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t3 ГДЕ t1.id = t2.id И t2.id = t3.id;
Или:
УДАЛИТЬ ИЗ t1, t2 ИСПОЛЬЗУЯ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t3 ГДЕ t1.id = t2.id И t2.id = t3.id;
Эти операторы используют все три таблицы при поиске строк для
удалить, но удалить совпадающие строки только из таблиц
t1
иt2
.В предыдущих примерах используется
INNER JOIN
, но
несколько таблицDELETE
операторов
может использовать другие типы соединений, разрешенные в
SELECT
операторов, например
ЛЕВОЕ СОЕДИНЕНИЕ
. Например, чтобы удалить строки,
существуют вt1
, которые не совпадают в
t2
, используйтеLEFT JOIN
:УДАЛИТЬ t1 ИЗ t1 ЛЕВОЕ СОЕДИНЕНИЕ t2 НА t1.id = t2.id ГДЕ t2.id ЕСТЬ NULL;
Синтаксис разрешает
.*
после каждого
имя_таблицы
для совместимости с
Доступ .Если вы используете многотабличный
DELETE
оператор, включающийтаблиц InnoDB
, для которых
есть ограничения внешнего ключа, оптимизатор MySQL может
обрабатывают таблицы в порядке, отличном от их
родительско-дочерние отношения. В этом случае утверждение не выполняется и
откатывается. Вместо этого вы должны удалить из одной таблицы и
полагаться на возможностиON DELETE
, которые
InnoDB
обеспечивает, чтобы другие таблицы были
изменен соответствующим образом.Примечание
Если вы объявляете псевдоним для таблицы, вы должны использовать псевдоним, когда
ссылаясь на таблицу:УДАЛИТЬ t1 ИЗ теста AS t1, test2 ГДЕ ...
Псевдонимы таблиц в нескольких таблицах
DELETE
следует декларировать только в
table_references
часть
утверждение. В других местах ссылки на псевдонимы разрешены, но не на псевдонимы.
декларации.Верный:
УДАЛИТЬ a1, a2 ИЗ t1 КАК a1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 КАК a2 ГДЕ a1.id = a2.id; УДАЛИТЬ ИЗ a1, a2 ИСПОЛЬЗУЯ t1 КАК a1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 КАК a2 ГДЕ a1.id = a2.id;
Неправильно:
УДАЛИТЬ t1 КАК a1, t2 КАК a2 ИЗ t1 ВНУТРЕННЕГО СОЕДИНЕНИЯ t2 ГДЕ a1.id = a2.id; УДАЛИТЬ ИЗ t1 КАК a1, t2 КАК a2 ИСПОЛЬЗУЯ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 ГДЕ a1.id = a2.id;
Псевдонимы таблиц также поддерживаются для одиночных таблиц.
- Удалить все записи это, как показано ниже,