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

Содержание

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.

Поделиться с друзьями

Реляционные базы данных и язык SQL

Команда 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;

Удаление записей, оператор delete

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

Общая структура запроса с оператором DELETE
DELETE FROM имя_таблицы
[WHERE условие_отбора_записей];

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

Если условие отбора записей WHERE отсутствует, то будут удалены все записи указанной таблицы.

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

Общая структура запроса с оператором TRUNCATE
TRUNCATE TABLE имя_таблицы;

Оптимизатор запросов СУБД MySQL автоматически использует оператор TRUNCATE, если оператор DELETE не содержит условия WHERE или конструкции LIMIT.

Однако у оператора TRUNCATE есть ряд отличий:

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

Удаление записей при многотабличных запросах

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

DELETE имя_таблицы_1 [, имя_таблицы_2] FROM 
имя_таблицы_1 JOIN имя_таблицы_2 
ON имя_таблицы_1.поле = имя_таблицы_2.поле
[WHERE условие_отбора_записей];

Например, нам необходимо удалить все бронирования жилья, в котором отсутствует кухня. Тогда запрос будет выглядеть следующим образом:

DELETE Reservations FROM 
Reservations JOIN Rooms ON  
Reservations.room_id = Rooms.id 
WHERE Rooms.has_kitchen = false;

Если бы, помимо удаления бронирования, нам нужно было также удалить и жилье, то запрос приобрел бы следующий вид:

DELETE Reservations, Rooms FROM 
Reservations JOIN Rooms ON  
Reservations.room_id = Rooms.id 
WHERE Rooms.has_kitchen = false;

Сложный Оператор Delete SQL — CodeRoad

Почему операторы delete имеют ограничения, выходящие за рамки их выбранных аналогов?

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

Например, у меня есть неориентированный список ребер с полями V1 и V2. К сожалению, при создании таблицы я ввел дубликаты (т. е. V1 — > V2 и V2 — > V1). Чтобы идентифицировать дупов, я запустил запрос:

SELECT t1.V1, t1.V2
FROM table t1
WHERE t1.V1 > t1.V2
    and EXISTS (
        SELECT *
        FROM table t2
        WHERE t2.V1 = t1.V2
          and t2.V2 = t1.V1 )

поскольку это вернуло хороший набор строк из таблицы, я подумал, что смогу заменить строку select на delete и повторить тот же запрос. Sql server однако разозлился и вместо этого дал мне красные буквы. Один раз о синтаксисе и после настройки что-то о связывании составных идентификаторов.

Мне удалось сохранить select в табличной переменной и выполнить delete-это нормально, но что было не так с моим первоначальным подходом и мог ли я сделать это с помощью одного оператора SQL?

sql

tsql

Поделиться

Источник


bob    

29 апреля 2013 в 17:47

2 ответа


  • Почему один оператор SQL delete вызовет тупик?

    Я использую SQL Server 2008 Enterprise. Мне интересно, почему даже один оператор delete этой хранимой процедуры вызовет тупик, если он будет выполняться несколькими потоками одновременно? Для оператора delete Param1 — это столбец таблицы FooTable, Param1-внешний ключ другой таблицы (относится к…

  • Cancelled SQL Server delete оператор в середине работы на сервере

    Оператор delete был случайно запущен, но отменен в течение нескольких секунд программистом в студии управления sql server. Можно ли узнать, какие записи были удалены, и восстановить их? Это для sql server 2008.



4

SQL Server довольно гибок с delete . Синтаксис double from разрешен практически везде, где есть select :

DELETE FROM t1
FROM table t1
WHERE t1.V1 > t1.V2
    and EXISTS (
        SELECT *
        FROM table t2
        WHERE t2.V1 = t1.V2
          and t2.V2 = t1. V1 )

Поделиться


Andomar    

29 апреля 2013 в 18:01



1

Я думаю, что вам понадобится синтаксис, похожий на этот;

delete from yourTable
where v1 in 
(select v1
 from etc
) 

Поделиться


Dan Bracuk    

29 апреля 2013 в 17:55


Похожие вопросы:

Оператор DELETE в sql слишком долго выполняется

У меня есть запрос sql delete, который вызывает удаление 15k записей. ниже приведен формат: query += DELETE FROM table1 WHERE attr1 IN (SELECT distinct attr2 FROM table2 WHERE condition1 = %d AND…

Как запустить множественный оператор Delete sql с помощью java JDBC?

Я хочу удалить сразу три разные таблицы, и у меня есть довольно простой оператор SQL, если на то пошло, как показано ниже : DELETE FROM tbl1;DELETE FROM tbl2;DELETE FROM tbl3; это утверждение верно,. ..

Исправьте этот оператор sql для Insert into, select, delete

INSERT INTO Checkout(ProductID, MemberID, Quantity) SELECT ProductID, MemberID, Quantity FROM Cart WHERE (MemberID = MemberID) DELETE FROM CART WHERE (MemberID = MemberID) Оператор sql…

Почему один оператор SQL delete вызовет тупик?

Я использую SQL Server 2008 Enterprise. Мне интересно, почему даже один оператор delete этой хранимой процедуры вызовет тупик, если он будет выполняться несколькими потоками одновременно? Для…

Cancelled SQL Server delete оператор в середине работы на сервере

Оператор delete был случайно запущен, но отменен в течение нескольких секунд программистом в студии управления sql server. Можно ли узнать, какие записи были удалены, и восстановить их? Это для sql…

Оператор Delete после выполнения SQL insert дважды

Из базы данных Oracle я дважды выполнил оператор insert SQL в производственной среде. К сожалению, вариант отката, похоже, не сработал. В инструкции Insert: INSERT INTO MAE_INT.T_INT_APPLICATION…

SQL Server: DELETE оператор с откатом INSERT оператор в файл

Интересно, как вы можете написать оператор T-SQL DELETE , используя OUTPUT , чтобы выплюнуть операторы INSERT для тех строк, которые вы удалили (в качестве плана отката в будущем), вместо того чтобы…

SQL Server не выполняется оператор Delete

Я создал запрос SQL w / c имеет оператор Delete , но, к сожалению, оператор Delete , похоже, не выполняется. Что не так с моим заявлением SQL? Вот мой код : BEGIN TRAN BEGIN TRY DECLARE @Mid…

Сложный запрос DELETE SQL

Мне нужно сделать запрос SQL, который будет DELETE записью в таблице album , только если подписанный клиент соответствует этим требованиям: // Variables as a demonstration const signedClientId = 1;…

Выполните оператор SQL после каждого DELETE

Есть ли способ заставить jOOQ выполнять оператор SQL (в моем случае a CHECKPOINT ) после каждого DELETE ? В идеале также должен быть способ указать таблицы, для которых это происходит. RDBMS,…

Оператор SQL TRUNCATE: синтаксис, примеры

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

  • Оператор SQL TRUNCATE не ведет запись об удаленных данных в журнал событий.
  • SQL DELETE осуществляет блокировку построчно, оператор SQL TRUNCATE по всей странице целиком. Вследствие этого, оператор SQL TRUNCATE не возвращает никакого значения, SQL DELETE же, возвращает количество удаленных строк.
  • После применения оператора SQL DELETE возможно сделать откат операции и восстановить удаленные данные (команда ROLLBACK). При применении оператора SQL TRUNCATE этого сделать нельзя, однако в СУБД MS SQL Server, оператор может применяться в транзакциях.

Реализация оператора SQL TRUNCATE различна для каждой СУБД, поэтому рекомендуется обращаться к документации используемой системы.

Оператор SQL TRUNCATE имеет следующий синтаксис:

TRUNCATE TABLE Table_name

Примеры оператора SQL TRUNCATE. Имеется следующая таблица Artists:

SingerAlbumYearSale
The ProdigyInvaders Must Die20081200000
Drowning PoolSinner2001400000
Massive AttackMezzanine19982300000
The ProdigyFat of the Land1997600000
The ProdigyMusic For The Jilted Generation19941500000
Massive Attack100th Window20031200000
Drowning PoolFull Circle2007800000
Massive AttackDanny The Dog20041900000
Drowning PoolResilience2013500000

Пример 1.  Удалить все данные из таблицы используя оператор SQL TRUNCATE:


TRUNCATE TABLE Artists

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


DELETE FROM Artists

2.18. Удаление данных — Transact-SQL В подлиннике : Персональный сайт Михаила Флёнова

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

Листинг 2.7. Общий вид оператора удаления DELETE


DELETE 
    [ FROM ] 
        { table_name WITH ( < table_hint_limited &qt; [ ...n ] ) 
         | view_name 
         | rowset_function_limited 
        } 

        [ FROM { < table_source &qt; } [ ,...n ] ] 

    [ WHERE 
        { < search_condition &qt; 
        | { [ CURRENT OF 
                { { [ GLOBAL ] cursor_name } 
                    | cursor_variable_name 
                } 
            ] }
        } 
    ] 

Минимальная команда удаления выглядит следующим образом:


DELETE tbPeoples

Эта команда удаляет все строки из таблицы tbPeoples. Те же самые действия можно выполнить с помощью вызова команды:


DELETE FROM tbPeoples

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

Пока не надо выполнять эти команды, потому что они очистят таблицу tbPeoples, а нам этого пока не нужно. Данные еще пригодятся для тестирования будущих запросов. Если хотите протестировать удаление, то создайте новую таблицу, заполните ее данными и очистите. Заодно вспомните и закрепите знания, которые мы рассматривали ранее. Можно создать новую таблицу с помощью команды SELECT INTO, это будет проще и быстрее.

Я предпочитаю использовать вторую команду, хотя она выполняет те же самые действия, а содержит на одно слово больше. Просто второй вариант более интеллектуально понятен. В первом случае команда читается как «удалить tbPeoples». Это не совсем корректно. Второй вариант команды звучит как «Удалить из tbPeoples». Это уже ближе отражает суть выполняемых действий.

Честно сказать, такая простота очистки всего содержимого таблицы, на мой взгляд, является недостатком. В моей практике уже не раз были случаи, когда удаление происходило случайно. Просто кто-то выделял в Query Analizyr не полную команду, и таблица очищалась сильнее, чем хотелось бы. Проблема кроется и в том, что в большинстве редакторов нет подтверждения при удаления. Я видел только одну программу, которая перед удалением отображала окно подтверждения и показывала, сколько строк будет удаляться – phpMySQLAdmin. Это программа для управления через WEB интерфейс базой данных MySQL.

Чтобы ограничить количество удаляемых строк, используется секция WHERE. Она используется точно так же, как и в запросах SELECT или UPDATE. Когда мы тестировали оператор INSERT, то вставили в таблицу достаточно много записей. Давайте подчистим их и попрактикуемся в использовании оператора DELETE.

Для начала удалим все строки, в которых поле «vcFamil» содержит нулевое значение. Это делается с помощью следующего запроса:


DELETE FROM tbPeoples
WHERE vcFamil is NULL

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

Следующий запрос удаляет запись, в которой первичный ключ «idPeoples» содержит значение -22:


DELETE FROM tbPeoples
WHERE idPeoples = -22

Предыдущие два запроса можно было бы выполнить одной командой:


DELETE FROM tbPeoples
WHERE vcFamil is NULL
 OR idPeoples = -22

В данном случае удаляются записи, в которых или фамилия не заполнена, или ключевое поле равно -22.

Давайте теперь для закрепления материала создадим что-нибудь посложнее. Например, удалим все записи из таблицы tbPeoples, у которых нет записей в таблице телефонов tbPhoneNumbers. Для этого сначала пишем запрос SELECT, чтобы убедиться, что он выбирает необходимые данные и не ошибиться:


SELECT *
FROM tbPeoples pl
WHERE NOT EXISTS
  (SELECT idPeoples 
   FROM tbPhoneNumbers pn
   WHERE pl.idPeoples=pn.idPeoples)

Этот запрос выбирает все строки, для которых не существует (NOT EXISTS) записи в таблице tbPhoneNumbers. Отличный пример, ведь подобные запросы приходиться писать достаточно часто.

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


DELETE
FROM tbPeoples
WHERE NOT EXISTS
  (SELECT idPeoples pl
   FROM tbPhoneNumbers pn
   WHERE pl.idPeoples=pn.idPeoples)

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


DELETE
FROM tbPeoples
WHERE NOT EXISTS
  (SELECT idPeoples 
   FROM tbPhoneNumbers pn
   WHERE tbPeoples.idPeoples=pn.idPeoples)

Недавно меня один очень опытный программист спросил: «А можно использовать оператор LIKE при удалении?». А почему бы и нет? Можно использовать любые операторы, которые мы изучали для секции WHERE, и LIKE тут не исключение. Следующий запрос удалит все записи, в которых фамилия начинается с буквы «С»:


DELETE
FROM tbPeoples
WHERE vcFamil LIKE 'С'

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


DELETE pn
FROM tbPhoneNumbers pn, inserted i
WHERE pn.idPeoples=i.idPeoples
 AND vcFamil = Фамилия

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

При удалении данных, для каждой удаляемой строки в журнале транзакций создается отдельная запись. О транзакциях мы подробно поговорим в разделе 2.19, а сейчас нам необходимо понимать, что это достаточно трудоемкий процесс. Это можно понять, даже не вникая в суть самих транзакций. Журнал транзакций – это файл и в него происходит запись для каждой удаляемой строки. Если в таблице 1 000 000 записей, то будет столько же обращений к жесткому диску, а если каждое обращение к диску отнимет хотя бы 10 байт данных, то мы потеряем на жестком диске 10 000 000 байт свободного пространства. Я думаю, что нас ожидают не очень радужные перспективы.

Но у MS SQL Server есть вариант решения этой проблемы — TRUNCATE TABLE. Ее можно использовать при удалении из таблицы всех записей, и при этом обращения к журналу будут сведены к минимуму. Для удаления всех записей из таблицы Товары нужно использовать следующий запрос:


TRUNCATE TABLE Имя_Таблицы

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

С помощью оператора TRUNCATE TABLE можно удалять только все записи из таблицы, потому что нет секции WHERE. К тому же, нельзя удалять из таблицы, которая связана с помощью внешнего ключа.

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

Удаление записей из базы данных SQL

Удаление записей

Для удаления записей из таблицы применяется оператор DELETE:

DELETE FROM имяТаблицы WHERE условие;

Данный оператор удаляет из указанной таблицы записи (а не отдельные значения столбцов), которые удовлетворяют указанному условию. Условие — это логическое выражение, различные конструкции которого были рассмотрены в предыдущих лабораторных занятиях.

Следующий запрос удаляет записи из таблицы Customer, в которой значение столбца LName равно ‘Иванов’:

 

DELETE FROM Customer

WHERE LName = ‘Иванов’

 

Если таблица содержатся сведения о нескольких клиентах с фамилией Иванов, то все они будут удалены.

В операторе WHERE может находиться подзапрос на выборку данных (оператор SELECT). Подзапросы в операторе DELETE работают точно так же, как и в операторе SELECT. Следующий запрос удаляет всех клиентов из города Москва, при этом уникальный идентификатор города возвращается с помощью подзапроса.

 

DELETE FROM Customer

WHERE IdCity IN (SELECT IdCity FROM City WHERE CityName = ‘Москва’)

 

Transact-SQL расширяет стандартный SQL, позволяя использовать в инструкции DELETE еще одно предложение FROM. Это расширение, в котором задается соединение, может быть использовано вместо вложенного запроса в предложении WHERE для указания удаляемых строк. Оно позволяет задавать данные из второго FROM и удалять соответствующие строки из таблицы в первом предложении FROM. В частности предыдущий запрос может быть переписан следующим образом

 

DELETE FROM Customer

FROM Customer k INNER JOIN

City c ON k.IdCity = c.IdCity AND c.CityName = ‘Москва’

 

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

 

SELECT *

FROM Customer k INNER JOIN

City c ON k.IdCity = c.IdCity AND c.CityName = ‘Москва’

 

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

 

DELETE FROM Product

 

Задание для самостоятельной работы: Сформулируйте на языке SQL запрос на удаление всех заказов, не имеющих в составе ни одного товара (т. е. все пустые заказы).

Еще записи по теме

Оператор SQL DELETE


Оператор SQL DELETE

Оператор DELETE используется для удаления существующих записей в таблице.

УДАЛИТЬ Синтаксис

УДАЛИТЬ ИЗ имя_таблицы ГДЕ условие ;

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


Демо-база данных

Ниже представлен выбор из таблицы «Клиенты» в примере Northwind.
база данных:

Идентификатор клиента Имя клиента ContactName Адрес Город Почтовый индекс Страна
1 Альфредс Футтеркисте Мария Андерс Obere Str.57 Берлин 12209 Германия
2 Ana Trujillo Emparedados y helados Ана Трухильо Avda. de la Constitución 2222 México D.F. 05021 Мексика
3 Антонио Морено Такерия Антонио Морено Матадерос 2312 Мексика Д.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 DELETE — удаление данных в таблице или нескольких таблицах

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

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

DELETE FROM table

WHERE

condition;

Чтобы удалить одну или несколько строк в таблице:

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

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

Примеры SQL DELETE

Давайте рассмотрим несколько примеров использования оператора DELETE.

SQL DELETE — удаление одной строки в таблице

Следующий оператор удаляет сотрудника с идентификатором 3 из таблицы сотрудников :

УДАЛИТЬ ОТ сотрудников

WHERE employeeID = 3;

SQL DELETE — удаление всех строк в таблице

Чтобы удалить все строки в таблице employee , вы просто выполните следующий запрос: (не рекомендуется и сделайте резервную копию перед этим)

SQL DELETE — удаление связанных строк в нескольких таблицах

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

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

При удалении строки в таблице employee необходимо также удалить связанные строки в таблице employeeterritories . Для этого необходимо выполнить два оператора DELETE следующим образом:

DELETE FROM employee

WHERE employeeID = 3;

УДАЛИТЬ С территории сотрудников

WHERE employeeID = 3

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

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

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

  • Было ли это руководство полезным?
  • Да Нет

SQL | Оператор DELETE — GeeksforGeeks

SQL | Оператор DELETE

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

Базовый синтаксис:

 УДАЛИТЬ ИЗ имя_таблицы WHERE some_condition;

  table_name : имя таблицы
  some_condition : условие выбора конкретной записи.

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

Пример таблицы:

Примеры запросов:

  • Удаление отдельной записи : удалите строки, в которых ИМЯ = «Ram». Это удалит только первую строку.
     УДАЛИТЬ ОТ ученика, ГДЕ ИМЯ = «Баран»;
     

    Вывод:
    Приведенный выше запрос удалит только первую строку, и таблица Студент теперь будет выглядеть так:

    ES

    ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст
    2 RAMESH GURGAON XXXXXXXXXX 18
    3 SUJIT ROHTAK XXXXXXXXXX Дели XXXXXXXXXX 18
    3 SUJIT ROHTAK XXXXXXXXXX 20
    2 RAMESH GURGAON XXXXXXX52 9013

    GURGAON XXXXXXX52 несколько записей : удалить строки из таблицы e Учащийся 20 лет.Это удалит 2 строки (третья строка и пятая строка).

     УДАЛИТЬ ОТ ученика ГДЕ Возраст = 20;
     

    Вывод:
    Приведенный выше запрос удалит две строки (третья строка и пятая строка), и таблица Student теперь будет выглядеть так:

    ROLL_NO NAME ADDRESS ТЕЛЕФОН Возраст
    1 Оперативная память Дели XXXXXXXXX 18
    2 RAMESH GURGAON XXXXXXX35 XXXXXXX35 4 SURESH Delhi XXXXXXXXXX 18
    2 RAMESH GURGAON XXXXXXXXXX 18
  • Удалить все записи это, как показано ниже,
     query1: «УДАЛИТЬ ОТ ученика»;
    
    query2: «УДАЛИТЬ * ОТ ученика»;
     

    Вывод:
    Все записи в таблице будут удалены, не останется записей для отображения.Стол Студент станет пустым!

  • Тест по SQL

    Эта статья предоставлена ​​ Harsh Agarwal . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на [email protected]. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

    Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью курса DSA Self Paced Course по приемлемой для студентов цене и будьте готовы к работе в отрасли.

    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 — с примерами

    Как удалить записи в SQL?

    DELETE безвозвратно удаляет записи из таблицы.
    DELETE может удалить одну или несколько записей в таблице.
    Используйте предложение WHERE, чтобы УДАЛИТЬ только определенные записи.

    Синтаксис SQL DELETE

    Общий синтаксис:

    УДАЛИТЬ имя-таблицы
     

    Чтобы удалить определенные записи, добавьте предложение WHERE:

    УДАЛИТЬ имя-таблицы
     ГДЕ условие
     

    ПРОДУКТ
    Идентификатор
    Наименование продукта
    Идентификатор поставщика
    Цена единицы
    Упаковка
    Снято с производства

    Примеры SQL DELETE

    Проблема : Удалить все продукты.

    УДАЛИТЬ продукт
     

    Результат: 77 записей удалены.


    ПРОДУКТ
    Идентификатор
    Наименование продукта
    Идентификатор поставщика
    Цена единицы
    Упаковка
    Снято с производства

    Проблема : Удалить продукты стоимостью более 50 долларов.

    УДАЛИТЬ продукт
     ГДЕ UnitPrice> 50
     

    Результат: 7 записей удалены.


    КЛИЕНТ
    Идентификатор
    Имя
    Фамилия
    Город
    Страна
    Телефон

    Проблема : Удалить клиента с Id = 21.

    УДАЛИТЬ клиента
     ГДЕ Id = 21
     

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

    Результат: 1 запись удалена.

    Оператор SQL DELETE

    Автор: Чайтанья Сингх | Файл: SQL

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

    Синтаксис оператора DELETE

    Чтобы удалить определенные строки из таблицы:

     УДАЛИТЬ
     FROM table_name
    ГДЕ Условие; 

    Чтобы удалить все строки из таблицы:

     УДАЛИТЬ
     FROM table_name;
     

    Этот оператор удаляет все записи из таблицы, но сама таблица не удаляется, поэтому структура таблицы, атрибуты и индексы остаются нетронутыми.

    Пример инструкции SQL DELETE

    Таблица: Клиенты

     CustomerName Сумма PurchaseYear OrderNo
    ------------ ------ ------------ -------
    Пол 1500 2018 1001
    Рик 1600 2019 1100
    Дерек 800 2017 1301
    Шеру 1100 2016 1789 

    Допустим, мы хотим удалить записи из таблицы, где год покупки предшествует 2018 году.
    Следующий оператор SQL удаляет определенные записи из таблицы, где PurchaseYear меньше 2018 года.

     УДАЛИТЬ ОТ клиентов, ГДЕ Покупка Год <2018;
     

    Результатов:
    Таблица Customers после выполнения вышеуказанного оператора DELETE будет выглядеть следующим образом:

     CustomerName Сумма PurchaseYear OrderNo
    ------------ ------ ------------ -------
    Пол 1500 2018 1001
    Рик 1600 2019 1100 

    Давайте возьмем еще несколько примеров :

    Пример: Удалите запись о клиенте, где CustomerName - «Рик»:

     УДАЛИТЬ ОТ клиентов, ГДЕ CustomerName = 'Rick';
     

    Этот оператор удалит 1 запись из таблицы.

    Пример: Удалить записи, в которых сумма больше 1000:

     УДАЛИТЬ ОТ клиентов, ГДЕ Сумма> 1000;
     

    Этот оператор удалит 3 записи из таблицы.

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

    Чтобы удалить все записи из таблицы, мы используем оператор DELETE без предложения where. Например: Допустим, мы хотим удалить все записи из таблицы «Клиенты».

     УДАЛИТЬ ОТ клиентов; 

    Этот оператор удаляет все строки из таблицы, но сама таблица не удаляется, поэтому структура таблицы, атрибуты таблицы и индексы остаются нетронутыми.

    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 привилегия для любых столбцов
    которые только читаются, например, те, которые указаны в
    WHERE clause.

    Производительность

    Когда вам не нужно знать количество удаленных строк,
    TRUNCATE TABLE оператор является
    более быстрый способ очистить стол, чем
    DELETE выписка без
    WHERE clause. в отличие
    УДАЛИТЬ ,
    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 инструкция для удаления строк
    из одной или нескольких таблиц в зависимости от условия в
    WHERE clause.Вы не можете использовать ORDER
    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 не будет опубликован. Обязательные поля помечены *