Почему DELETE без WHERE опасен и как правильно удалять строки?
Хочу удалить из таблицы одного ученика, который выбыл. Написал DELETE FROM students; — и у меня пропали ВСЕ! Хорошо, что это была учебная база. Как правильно удалить только одну строку?
2 ответа
Ты наткнулся на самую известную ловушку SQL. Команда DELETE FROM students; без WHERE удаляет ВСЕ строки таблицы. Это не баг — база сделала ровно то, что ты написал: «удали из students» (всё).
Чтобы удалить только одного ученика, добавь условие:
DELETE FROM students WHERE name = 'Петя';
или надёжнее — по уникальному id:
DELETE FROM students WHERE id = 2;
Правила безопасности новичка:
- У
DELETEиUPDATEпочти всегда должен бытьWHERE. - Перед удалением сделай
SELECTс тем же WHERE и посмотри, какие строки попадут под условие:
SELECT * FROM students WHERE id = 2;
Если SELECT показал именно то, что хочешь удалить — меняй SELECT на DELETE. Так ты не снесёшь лишнего.
В реальных проектах от этого защищаются по-разному: делают бэкапы, включают «safe mode», который запрещает DELETE/UPDATE без WHERE. Но привычка №1 — просто никогда не запускать DELETE, не подумав про WHERE.