5.1 Оператор DELETE FROM

Что просто делать в SQL, так это удалять данные. Ты можешь удалить абсолютно все очень быстро, и у тебя даже никто не спросит никаких подтверждений.

Начнем с самого простого сценария: как удалить одну строку в таблице.

Этот сценарий ты будешь встречать чаще всего, обычно это удаление какой-то конкретной записи, и стандартный запрос обычно имеет вид:


DELETE FROM таблица  
WHERE id = 133;
        

Это единственный запрос, где не нужно указывать имена колонок: данные ведь удаляются сразу строками.

Второй сценарий – это удаление строк, которые заданы списком id, тут тоже все довольно просто:


DELETE FROM таблица  
WHERE id IN (1, 2, 3, …);
        

Третий сценарий – это удаление строк, которые соответствуют определенному условию:


DELETE FROM таблица  
WHERE условие;
        

Допустим, мы хотим уволить всех наших программистов, тогда нужно написать запрос типа:


DELETE FROM employee  
WHERE occupation = 'Программист';
        

И, наконец, если ты хочешь удалить все записи, то можешь написать такой запрос:


DELETE FROM таблица 

Такого простого запроса достаточно, чтобы удалить все записи из таблицы. Кстати, никакого Ctrl+Z при этом не будет. Записи просто удаляются без возможности восстановления и все. Так что делай бэкапы, да почаще.

5.2 Удаляем вообще все

Для быстрого удаления (чтобы добавить юзерам головной боли) у SQL есть еще несколько команд.

Как быстро удалить все данные в таблице? Воспользуйся оператором TRUNCATE:


TRUNCATE TABLE таблица
        

Одна опечатка в названии таблицы — и пара дней восстановления данных тебе обеспечены. Радуйся, что ты не админ баз данных.

Если тебе нужно удалить не просто данные в таблице, а и саму таблицу, то для этого есть оператор DROP:


DROP TABLE таблица
        

Кстати, аналогичные варианты есть и со схемами баз данных. Если хочешь удалить саму базу, то:


DROP SCHEMA база_данных
        

или:


DROP DATABASE база_данных
        

Также с помощью DROP можно удалять:

  • EVENT
  • FUNCTION
  • PROCEDURE
  • INDEX
  • VIEW
  • TRIGGER

И вот тебе пару интересных историй, связанных с удалением данных:

Провал дня. GitLab удалил 300 ГБ данных клиентов из-за ошибки сисадмина

sudo rm -rf, или Хроника инцидента с базой данных GitLab.com от 2017/01/31

Кремниевая Долина "Silicon Valley" - Удаление данных

undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 4 лекция
Недоступна
task0615
Удали из таблицы task запись с id равным 5.
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 4 лекция
Недоступна
task0616
Удали из таблицы task записи с id в диапазоне от 5 до 10.
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 4 лекция
Недоступна
task0617
Удали из таблицы task все записи с помощью delete.
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 4 лекция
Недоступна
task0618
Удали из таблицы task все записи с помощью truncate.
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 4 лекция
Недоступна
task0619
Удали вьюшку (view) task_view.