Справочник по 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.
