Where from delete sql: DELETE (Transact-SQL) — SQL Server

Содержание

SQL DELETE — удаление данных из таблицы базы данных

Оглавление
Связанные темы


Оператор SQL DELETE предназначен для удаления данных из таблицы. Он имеет следующий синтаксис:


DELETE FROM ИМЯ_ТАБЛИЦЫ
WHERE УСЛОВИЕ


Если не указывать условие, из таблицы будут удалены все строки. Кроме того, следует помнить,
что могут быть удалены лишь строки с первичными ключами, на которые не ссылаются внешние ключи в других
таблицах (более подробно об ограничениях удаления — в уроке Реляционная модель данных).


Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД
не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке
.


А скрипт для создания базы данных «Портал объявлений 1», её таблицы и заполения таблицы данных —
в файле по этой ссылке
.

Пример 1. Итак, есть база портала объявлений. В ней есть таблица Ads, содержащая
данные о объявлениях, поданных за неделю (более подробно — в уроке об агрегатных функциях SQL, пример 7).
Таблица выглядит так:














IdCategoryPartUnitsMoney
1ТранспортАвтомашины11017600
2НедвижимостьКвартиры8918690
3НедвижимостьДачи5711970
4ТранспортМотоциклы13120960
5СтройматериалыДоски687140
6ЭлектротехникаТелевизоры1278255
7ЭлектротехникаХолодильники1378905
8СтройматериалыРегипс11211760
9ДосугКниги966240
10НедвижимостьДома479870
11ДосугМузыка1177605
12ДосугИгры412665

Требуется удалить из таблицы строку, имеющую идентификатор 4. Для этого
пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE adportal1;):


DELETE FROM ADS
WHERE Id=4

Пример 2. Можно удалить и несколько строк, если в условии применить
оператор сравнения «больше» или «меньше» (на MS SQL Server — с предваряющей конструкцией USE adportal1;):


DELETE FROM ADS
WHERE Id>4

В результате в таблице останутся лишь следующие строки:










IdCategoryPartUnitsMoney
5СтройматериалыДоски687140
6ЭлектротехникаТелевизоры1278255
7ЭлектротехникаХолодильники1378905
8СтройматериалыРегипс11211760
9ДосугКниги966240
10НедвижимостьДома479870
11ДосугМузыка1177605
12ДосугИгры412665

Пример 3. Аналогично можно удалять строки с заданными значениями
любого столбца. Удалим, например, строки об объявлениях, за которые выручено менее 10000 денежных единиц
(запрос на MS SQL Server — с предваряющей конструкцией USE adportal1;):

DELETE FROM ADS
WHERE Money

В результате в таблице останутся лишь следующие строки:







IdCategoryPartUnitsMoney
1ТранспортАвтомашины11017600
2НедвижимостьКвартиры8918690
3НедвижимостьДачи5711970
4ТранспортМотоциклы13120960
8СтройматериалыРегипс11211760


Для удаления всех строк из таблицы применяется оператор 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:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden


Пример удаления SQL

Следующая инструкция SQL удаляет клиента «альфредс футтеркисте» из таблицы «клиенты»:

Пример

DELETE FROM Customers
WHERE CustomerName=’Alfreds Futterkiste’;

Таблица «Customers» теперь будет выглядеть так:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Удалить все записи

Можно удалить все строки в таблице без удаления таблицы. Это означает, что структура таблицы, атрибуты и индексы будут нетронутыми:

Или:

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 .Следующее иллюстрирует его синтаксис:

 

DELETE [TOP (выражение) [PERCENT]] FROM table_name [WHERE search_condition];

Язык кода: SQL (язык структурированных запросов) (sql)

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

Например, следующий оператор удалит все строки из target_table :

 

DELETE FROM target_table;

Язык кода: SQL (язык структурированных запросов) (sql)

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

Например, следующий оператор DELETE удаляет 10 случайных строк из target_table :

 

DELETE TOP 10 FROM target_table;

Язык кода: SQL (язык структурированных запросов) (sql)

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

Точно так же вы можете удалить 10 процентов случайных строк, используя следующий оператор DELETE :

 

DELETE TOP 10 PERCENT FROM target_table;

Язык кода: SQL (язык структурированных запросов) (sql)

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

Строки, из-за которых search_condition оценивается как истинное, будут удалены.

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

SQL Server

DELETE Примеры операторов

Давайте создадим новую таблицу для демонстрации.

Следующий оператор создает таблицу с именем production.product_history с данными, скопированными из таблицы production.products :

 

SELECT * INTO production.product_history ИЗ production.products;

Язык кода: SQL (язык структурированных запросов) (sql)

Следующий запрос возвращает все строки из таблицы product_history :

 

SELECT * FROM production.product_history;

Язык кода: SQL (язык структурированных запросов) (sql)

Как ясно видно из выходных данных, всего у нас 321 строка.

1) Удалить количество случайных строк, пример

Следующий оператор DELETE удаляет 21 случайную строку из таблицы product_history :

 

DELETE TOP (21) ИЗ production.product_history;

Язык кода: SQL (язык структурированных запросов) (sql)

Вот сообщение, выданное SQL Server:

 

(затронута 21 строка)

Язык кода: SQL (язык структурированных запросов) (sql)

Это означает, что 21 строка была удалена.

2) Удалить процент случайных строк, пример

Следующий оператор DELETE удаляет 5 процентов случайных строк из таблицы product_history :

 

DELETE TOP (5) PERCENT ИЗ production.product_history;

Язык кода: SQL (язык структурированных запросов) (sql)

SQL Server выдал следующее сообщение, указывающее, что 15 строк (300 x 5% = 15) были удалены.

 

(затронуто 15 рядов)

Язык кода: SQL (язык структурированных запросов) (sql)

3) Удалить некоторые строки с примером условия

Следующий оператор DELETE удаляет все продукты с модельным годом 2017:

 

DELETE ИЗ производство.product_history КУДА model_year = 2017;

Язык кода: SQL (язык структурированных запросов) (sql)

Вот выходное сообщение:

 

(затронуто 75 строк)

Язык кода: SQL (язык структурированных запросов) (sql)

4) Удалить все строки из примера таблицы

Следующий оператор DELETE удаляет все строки из таблицы product_history :

 

DELETE ОТ ПРОИЗВОДСТВА.product_history;

Язык кода: SQL (язык структурированных запросов) (sql)

Обратите внимание, что если вы хотите удалить все строки из большой таблицы, вы должны использовать оператор 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 для удаления данных. Но есть список соображений, которые необходимо учитывать при использовании оператора удаления, и он выглядит следующим образом:

    1. Всегда рекомендуется начинать с оператора SELECT, прежде чем что-либо удалять, чтобы убедиться, что вы выбираете правильные записи.Таким образом, оператор delete используется для удаления строк из таблицы с использованием предложения where для выбора только удаляемых строк.
    2. Всегда используйте уникальный идентификатор для поиска строк, которые нужно удалить.
    3. Чтобы удалить все строки в таблице, всегда используйте TRUNCATE TABLE. TRUNCATE TABLE, который работает быстрее, чем оператор удаления SQL, и использует меньше ресурсов системы и журнала транзакций.
    4. По умолчанию операторы DELETE вызывают эксклюзивную (X) блокировку таблицы, и она удерживает блокировку до завершения транзакции.
    5. Исключительная блокировка предотвращает изменение данных другой транзакцией; операции чтения разрешены с использованием подсказки NOLOCK или уровня изоляции чтения незафиксированных
    6. Рекомендуется указывать подсказку TABLOCK в операторе удаления.Этот процесс позволяет освободить страницу и связанное с ней пространство, доступное для повторного использования другими объектами в базе данных.
    7. Перед выполнением оператора удаления рекомендуется создать кластеризованный индекс в таблице кучи.
    8. Хотя это очень просто и очень мощно, и результат оператора 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 вообще) может быть полезно:

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

        INSERT INTO t_copy SELECT * FROM t WHERE ...;  
    2. Используйте RENAME TABLE , чтобы атомарно
      переместите исходную таблицу в сторону и переименуйте копию в
      исходное название:

        ПЕРЕИМЕНОВАНИЕ ТАБЛИЦЫ t TO t_old, t_copy TO t;  
    3. Отбросьте исходную таблицу:

        ТАБЛИЦА ПАДЕНИЯ 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 может привести к потере места в индексе
    что остается невостребованным. Вот пример такого сценария:

    1. Создайте таблицу, содержащую индексированный
      AUTO_INCREMENT столбец.

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

    3. Удалить блок строк в нижнем конце диапазона столбцов
      используя DELETE QUICK .

    В этом сценарии индексные блоки, связанные с удаленным
    значения индекса становятся недозаполненными, но не объединяются с другими
    index блоков за счет использования QUICK . Они
    остаются не заполненными при новых вставках, потому что новые строки не
    имеют значения индекса в удаленном диапазоне. Кроме того, они остаются
    недостаточно заполнен, даже если вы позже воспользуетесь
    DELETE без
    QUICK , если только некоторые из удаленных значений индекса
    оказываются в индексных блоках внутри или рядом с
    недозаполненные блоки.Чтобы освободить неиспользуемое индексное пространство под этими
    обстоятельства, используйте OPTIMIZE TABLE .

    Если вы собираетесь удалить много строк из таблицы, это может быть
    быстрее использовать УДАЛИТЬ БЫСТРО с последующим
    ТАБЛИЦА ОПТИМИЗАЦИИ . Это восстанавливает
    index вместо выполнения многих операций слияния блоков индекса.

    Удаление нескольких таблиц

    Вы можете указать несколько таблиц в
    DELETE инструкция для удаления строк
    из одной или нескольких таблиц в зависимости от условия в
    ГДЕ пункт.Вы не можете использовать ЗАКАЗАТЬ
    BY
    или LIMIT в многостоловой
    УДАЛИТЬ . В
    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;  

    Псевдонимы таблиц также поддерживаются для одиночных таблиц.

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

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