Справочник по MySQL : SQL : Удаление строк из таблицы (DELETE FROM)

Материал из Справочник Web-языков.

Перейти к: навигация, поиск
Главная  ::. MySQL  ::. SQL  ::. Удаление строк из таблицы (DELETE FROM)

Удаление записей осуществляется командой 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` WHERE1 =1

Но в этом случае выполнение команды происходит значительно медленнее.

LOW_PRIORITY
- Если указано это ключевое слово, то удаление записей из таблицы table_name не будет произведено до тех пор, пока другие процессы не закончат чтение их этой таблицы.
QUICK
- Если указано это ключевое слово, то при удалении записей обработчик таблицы не будет объединять индексы, что может ускорить операцию удаления.
table_name
- Имя таблицы в базе данных, из которой будет происходить удаление строк.
LIMIT
- Задает максимальное количество строк, которые могут быть удалены за текущий запрос.
Следующий запрос удалит из таблицы users только 5 строк:
DELETE FROM `users` LIMIT5
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` LIMIT1
Теперь таблица имеет значения:
SELECT * FROM `users` 
+-------+-----+
| name  | age |
+-------+-----+
| Миша  |  25 |
| Ксюша |  15 |
| Саша  |  26 |
| Дима  |  30 |
+-------+-----+
4 rows in set (0.00 sec)
Можем также удалить самого старого:
DELETE FROM `users` ORDER BY `age` DESCLIMIT1
Теперь таблица имеет значения:
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.
Личные инструменты
2.49403882027