В этом учебном пособии вы узнаете, как использовать MySQL оператор DELETE с синтаксисом и примерами.
Описание
MySQL оператор DELETE используется для удаления одной записи или нескольких записей из таблицы в MySQL.
Синтаксис
Простой синтаксис оператора DELETE в MySQL:
[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.
Например:
1 2 |
DELETE FROM contacts WHERE last_name = 'Markoski'; |
В этом MySQL примере DELETE удалит все записи из таблицы contacts, где last_name = 'Markoski'.
Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующую MySQL предложение SELECT перед выполнением удаления.
1 2 3 |
SELECT count(*) FROM contacts WHERE last_name = 'Markoski'; |
Пример с двумя условиями
Рассмотрим MySQL пример DELETE, где у нас есть только два условия в инструкции DELETE.
Например:
1 2 3 |
DELETE FROM contacts WHERE last_name = 'Markoski' AND contact_id < 2000; |
Этот MySQL пример DELETE удалит все записи из таблицы contacts, где last_name = 'Markoski', а customer_id менее 2000.
Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующую MySQL предложение SELECT перед выполнением удаления.
1 2 3 4 |
SELECT count(*) FROM contacts WHERE last_name = 'Markoski' AND contact_id < 2000; |
Пример с модификатором LIMIT
Давайте рассмотрим пример MySQL DELETE, в котором мы используем модификатор LIMIT для управления количеством удаленных записей.
Например:
1 2 3 4 |
DELETE FROM contacts WHERE last_name = 'Markoski' ORDER BY contact_id DESC LIMIT 1; |
В этом 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 следующим образом:
1 2 3 4 |
DELETE FROM contacts WHERE last_name = 'Markoski' ORDER BY contact_id ASC LIMIT 1; |
Или вы можете удалить последнюю запись в таблице contacts со следующим оператором DELETE (при условии, что contact_id является порядковым номером):
1 2 3 |
DELETE FROM contacts ORDER BY contact_id DESC LIMIT 1; |
Пример c использованием условия EXISTS
Вы также можете выполнять более сложные удаления.
Вы можете удалить записи в одной таблице на основе значений в другой таблице. Поскольку вы не можете перечислить более чем одну таблицу в MySQL операторе FROM при выполнении удаления, вы можете использовать MySQL оператор EXISTS.
Например:
1 2 3 4 5 6 |
DELETE FROM suppliers WHERE EXISTS ( SELECT * FROM customers WHERE customers.customer_id = suppliers.supplier_id AND customers.customer_id > 300 ); |
В этом MySQL примере DELETE удалит все записи в таблице suppliers, где есть запись в таблице customers, чья customer_id больше 300, а customer_id равен supplier_id.
Вы можете определить количество строк, которые будут удалены, вызвав функцию mysql_info или выполнив следующее MySQL предложение SELECT перед выполнением удаления.
1 2 3 4 5 6 |
SELECT COUNT(*) FROM suppliers WHERE EXISTS ( SELECT * FROM customers WHERE customers.customer_id = suppliers.supplier_id AND customers.customer_id > 300 ); |