Справочник по 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.
Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="https://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования