Справочник по MySQL : SQL : Удаление строк из таблицы (DELETE FROM)
смотрим также
Материал из Справочник Web-языков
Удаление записей осуществляется командой DELETE FROM.
Синтаксис оператора DELETE FROM
DELETE [LOW_PRIORITY | QUICK] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT rows]
или
DELETE [LOW_PRIORITY | QUICK] table_name[.*] [,table_name[.*] ...] FROM table-references [WHERE where_definition]
или
DELETE [LOW_PRIORITY | QUICK] FROM table_name[.*], [table_name[.*] ...] USING table-references [WHERE where_definition]
Команда DELETE удаляет из таблицы table_name все записи, удовлетворяющие условию where_definition. Если условие WHERE where_definition не задано, то из таблицы table_name удаляются все записи.
Команда DELETE возвращает количество удаленных записей.
Следует учитывать, что если в команде DELETE не задано условие WHERE where_definition, то команда возвратит 0, хотя записи были удалены.
Если все же необходимо удалить все записи и узнать их количество, то в условии where_definition нужно задать заведомо истинное значение:
DELETE FROM `users` WHERE 1=1
Но в этом случае выполнение команды происходит значительно медленнее.
- LOW_PRIORITY
- - Если указано это ключевое слово, то удаление записей из таблицы table_name не будет произведено до тех пор, пока другие процессы не закончат чтение их этой таблицы.
- QUICK
- - Если указано это ключевое слово, то при удалении записей обработчик таблицы не будет объединять индексы, что может ускорить операцию удаления.
- table_name
- - Имя таблицы в базе данных, из которой будет происходить удаление строк.
- LIMIT
- - Задает максимальное количество строк, которые могут быть удалены за текущий запрос.
- Следующий запрос удалит из таблицы users только 5 строк:
DELETE FROM `users` LIMIT 5
- ORDER BY
- - Задает имя поля, или имена полей через запятую, по которым происходит сортировка удаляемых записей.
- Эта возможность актуальна при необходимости удалить только определенное кол-во записей, отсортированных по какому-либо свойству.
- Следующий пример удалит из таблицы users запись самого молодого человека.
- Допустим таблица users имеет следующий вид:
CREATE TABLE `users`( `name` VARCHAR(255) NOT NULL, `age` SMALLINT(3) NOT NULL )
- Запишем в нее несколько записей:
INSERT INTO `users` ( `name`, `age` ) VALUES ('Миша', 25), ('Ксюша', 15), ('Настя', 12), ('Саша', 26), ('Дима', 30)
- Таблица users имеет значения:
SELECT * FROM `users`
+-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Настя | 12 | | Саша | 26 | | Дима | 30 | +-------+-----+ 5 rows in set (0.00 sec)
- Удаляем самого молодого:
DELETE FROM `users` ORDER BY `age` LIMIT 1
- Теперь таблица имеет значения:
SELECT * FROM `users`
+-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | | Дима | 30 | +-------+-----+ 4 rows in set (0.00 sec)
- Можем также удалить самого старого:
DELETE FROM `users` ORDER BY `age` DESC LIMIT 1
- Теперь таблица имеет значения:
SELECT * FROM `users`
+-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | +-------+-----+ 3 rows in set (0.00 sec)
- Сортировка удаляемых записей при помощи команды ORDER BY появилась в MySQL начиная с версии 4.0.
- FROM table-references и USING ...
- - Позволяют удалять записи сразу из нескольких таблиц руководствуясь многотабличным условием WHERE where_definition.
- Следующие два примера равнозначны по производимым действиям и удаляют одинаковые записи в таблицах table_1 и table_2 и используя при поиске значений еще и таблицу table_3:
DELETE `table_1`, `table_2` FROM `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id`
- Аналогичный запрос:
DELETE FROM `table_1`, `table_2` USING `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id`
- Возможность многотабличного удаления записей появилась в MySQL начиная с версии 4.0.