DELETE оператор MySQL

В этом учебном пособии вы узнаете, как использовать MySQL оператор DELETE с синтаксисом и примерами.

Описание

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

Синтаксис

Простой синтаксис оператора DELETE в MySQL:

DELETE FROM table
[WHERE conditions];
Теперь полный синтаксис оператора DELETE в MySQL:
DELETE [ LOW_PRIORITY ] [ QUICK ] [ IGNORE ] FROM table
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT number_rows];

Параметры или аргументы

LOW_PRIORITY — необязательный. Если указан LOW_PRIORITY, удаление будет задерживаться до тех пор, пока не будет никаких процессов затрагивающих таблицу. LOW_PRIORITY может использоваться с таблицами MyISAM, MEMORY и MERGE, которые используют блокировку на уровне таблицы.
QUICK — необязательный. Если указан QUICK, в процессе удаления не удаляются листы индекса, что делает удаление быстрее для таблиц MyISAM
IGNORE — необязательный. Если указан IGNORE, все ошибки, возникающие во время удаления, игнорируются. IGNORE был представлен в MySQL 4.1.1.
table — таблица, из которой вы хотите удалить записи.
WHERE conditions — необязательный. Условия, которые должны быть выполнены для записей, подлежащих удалению. Если условий не предусмотрено, все записи из таблицы будут удалены.
ORDER BY expression — необязательный. Он может использоваться в сочетании с LIMIT для сортировки записей соответствующим образом при ограничении количества удаляемых записей.
LIMIT — необязательный. Если LIMIT указан, то он контролирует максимальное количество записей для удаления из таблицы. В лучшем случае количество записей, заданных number_rows, будет удалено из таблицы.

Примечание

  • Вам не нужно указывать поля в инструкции DELETE MySQL, так как вы удаляете всю строку из таблицы.

Пример с одним условием

Рассмотрим пример запроса MySQL DELETE, в котором у нас есть только одно условие в операторе DELETE.
Например:

В этом MySQL примере DELETE удалит все записи из таблицы contacts, где last_name = ‘Markoski’.
Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующую MySQL предложение SELECT перед выполнением удаления.

Пример с двумя условиями

Рассмотрим MySQL пример DELETE, где у нас есть только два условия в инструкции DELETE.
Например:

Этот MySQL пример DELETE удалит все записи из таблицы contacts, где last_name = ‘Markoski’, а customer_id менее 2000.

Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующую MySQL предложение SELECT перед выполнением удаления.

Пример с модификатором LIMIT

Давайте рассмотрим пример MySQL DELETE, в котором мы используем модификатор LIMIT для управления количеством удаленных записей.
Например:

В этом MySQL примере DELETE удалит одну запись из таблицы contacts (как указано в LIMIT 1), где last_name — ‘Markoski’. DELETE сортируется в порядке убывания contact_id, поэтому только запись с наибольшим contact_id, чье имя last_name ‘Markoski’ будет удалено из таблицы. Все остальные записи в таблице contacts с last_name = ‘Markoski’ останутся в таблице.

Если вы хотите вместо этого удалить наименьший contact_id, чье last_name является ‘Markoski’, вы можете переписать оператор DELETE следующим образом:

Или вы можете удалить последнюю запись в таблице contacts со следующим оператором DELETE (при условии, что contact_id является порядковым номером):

Пример c использованием условия EXISTS

Вы также можете выполнять более сложные удаления.
Вы можете удалить записи в одной таблице на основе значений в другой таблице. Поскольку вы не можете перечислить более чем одну таблицу в MySQL операторе FROM при выполнении удаления, вы можете использовать MySQL оператор EXISTS.
Например:

В этом MySQL примере DELETE удалит все записи в таблице suppliers, где есть запись в таблице customers, чья customer_id больше 300, а customer_id равен supplier_id.

Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующее MySQL предложение SELECT перед выполнением удаления.