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

смотрим также

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{MapNavigationLevel3|razdelurl1=mysql|razdeltitle1=MySQL|razdelurl2=mysql/sql/vartype|razdeltitle2=SQL|razdelurl3=mysql/sql/delete|razdeltitle3=Удаление строк из табл...)
 
(3 промежуточные версии не показаны)
Строка 1: Строка 1:
-
{{MapNavigationLevel3|razdelurl1=mysql|razdeltitle1=MySQL|razdelurl2=mysql/sql/vartype|razdeltitle2=SQL|razdelurl3=mysql/sql/delete|razdeltitle3=Удаление строк из таблицы (DELETE FROM)|prevurl=mysql/sql/insert|prevtitle=Вставка строки в таблицу INSERT|nexturl=mysql/sql/update|nexttitle=Обновление записей в таблице(UPDATE)}}
+
{{TopNavigationYUI}}
 +
{{Внедрение SugarCRM}}
'''Удаление записей''' осуществляется командой '''DELETE FROM'''.
'''Удаление записей''' осуществляется командой '''DELETE FROM'''.
Строка 52: Строка 53:
:Следующий запрос удалит из таблицы ''users'' только 5 строк:  
:Следующий запрос удалит из таблицы ''users'' только 5 строк:  
-
:<mysql>DELETE FROM
+
:
 +
<mysql>DELETE FROM
     `users`
     `users`
LIMIT
LIMIT
Строка 66: Строка 68:
:Допустим таблица ''users'' имеет следующий вид:  
:Допустим таблица ''users'' имеет следующий вид:  
-
:<mysql>CREATE TABLE
+
:
 +
<mysql>CREATE TABLE
     `users`(
     `users`(
         `name` VARCHAR(255) NOT NULL,
         `name` VARCHAR(255) NOT NULL,
Строка 74: Строка 77:
:Запишем в нее несколько записей:  
:Запишем в нее несколько записей:  
-
:<mysql>INSERT INTO
+
:
 +
<mysql>INSERT INTO
     `users` (
     `users` (
         `name`, `age`
         `name`, `age`
Строка 87: Строка 91:
:Таблица ''users'' имеет значения:  
:Таблица ''users'' имеет значения:  
-
:<mysql>SELECT
+
:
 +
<mysql>SELECT
     *
     *
FROM
FROM
Строка 105: Строка 110:
:Удаляем самого молодого:  
:Удаляем самого молодого:  
-
:<mysql>DELETE FROM
+
:
 +
<mysql>DELETE FROM
     `users`
     `users`
ORDER BY
ORDER BY
Строка 114: Строка 120:
:Теперь таблица имеет значения:  
:Теперь таблица имеет значения:  
-
:<mysql>SELECT
+
:
 +
<mysql>SELECT
     *
     *
FROM
FROM
Строка 131: Строка 138:
:Можем также удалить самого старого:  
:Можем также удалить самого старого:  
-
:<mysql>DELETE FROM
+
:
 +
<mysql>DELETE FROM
     `users`
     `users`
ORDER BY
ORDER BY
Строка 140: Строка 148:
:Теперь таблица имеет значения:  
:Теперь таблица имеет значения:  
-
:<mysql>SELECT
+
:
 +
<mysql>SELECT
     *
     *
FROM
FROM
Строка 161: Строка 170:
:Следующие два примера равнозначны по производимым действиям и удаляют одинаковые записи в таблицах ''table_1'' и ''table_2'' и используя при поиске значений еще и таблицу ''table_3'':  
:Следующие два примера равнозначны по производимым действиям и удаляют одинаковые записи в таблицах ''table_1'' и ''table_2'' и используя при поиске значений еще и таблицу ''table_3'':  
-
:<mysql>DELETE
+
:
 +
<mysql>DELETE
     `table_1`,
     `table_1`,
     `table_2`
     `table_2`
Строка 174: Строка 184:
:Аналогичный запрос:  
:Аналогичный запрос:  
-
:<mysql>DELETE FROM
+
:
 +
<mysql>DELETE FROM
     `table_1`,
     `table_1`,
     `table_2`
     `table_2`

Текущая версия на 15:29, 26 апреля 2011


Удаление записей осуществляется командой 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 Индекс цитирования