← Все вопросы

Почему DELETE без WHERE опасен и как правильно удалять строки?

Задан 8 месяцев назад752 просмотров2 ответа
8

Хочу удалить из таблицы одного ученика, который выбыл. Написал DELETE FROM students; — и у меня пропали ВСЕ! Хорошо, что это была учебная база. Как правильно удалить только одну строку?

2 ответа

13
✓ Принятый ответ — помог автору

Ты наткнулся на самую известную ловушку SQL. Команда DELETE FROM students; без WHERE удаляет ВСЕ строки таблицы. Это не баг — база сделала ровно то, что ты написал: «удали из students» (всё).

Чтобы удалить только одного ученика, добавь условие:

DELETE FROM students WHERE name = 'Петя';

или надёжнее — по уникальному id:

DELETE FROM students WHERE id = 2;

Правила безопасности новичка:

  1. У DELETE и UPDATE почти всегда должен быть WHERE.
  2. Перед удалением сделай SELECT с тем же WHERE и посмотри, какие строки попадут под условие:
SELECT * FROM students WHERE id = 2;

Если SELECT показал именно то, что хочешь удалить — меняй SELECT на DELETE. Так ты не снесёшь лишнего.

5

В реальных проектах от этого защищаются по-разному: делают бэкапы, включают «safe mode», который запрещает DELETE/UPDATE без WHERE. Но привычка №1 — просто никогда не запускать DELETE, не подумав про WHERE.

Ваш ответ

Войдите, чтобы ответить на вопрос.