← Все вопросы

Как безопасно обновлять и удалять строки в SQL (UPDATE/DELETE и WHERE)?

Задан 4 месяца назад981 просмотров3 ответа
17

Боюсь делать UPDATE и DELETE на рабочей базе. Слышал, что можно случайно снести всю таблицу. Как правильно и не выстрелить себе в ногу?

3 ответа

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

Главная ловушка: UPDATE/DELETE БЕЗ WHERE затрагивают ВСЕ строки таблицы.

DELETE FROM users;            -- ❌ удалит вообще всех
DELETE FROM users WHERE id = 7;  -- ✅ только одного

Мои привычки, чтобы не угробить базу:

  1. Сначала пишу тот же WHERE в SELECT и смотрю, какие строки попадут.
  2. Только потом меняю SELECT * на UPDATE ... SET / DELETE.
  3. На проде работаю в транзакции: BEGIN; ... — посмотрел результат, и COMMIT; или ROLLBACK; если что-то не так.
BEGIN;
UPDATE orders SET status = 'cancelled' WHERE user_id = 42;
-- проверил, что задело сколько ожидал
COMMIT;
Георгий Почапский транзакция реально спасала меня уже дважды 😅 · 4 месяца назад
Милана Журавлёва приём «сначала SELECT с тем же WHERE» — золото, забрал себе · 4 месяца назад
12

Всегда пиши WHERE. Нет WHERE — пострадает вся таблица.

7

Можно ещё в клиенте включить «safe updates», тогда UPDATE/DELETE без ключа в WHERE просто не выполнятся. В MySQL это SET SQL_SAFE_UPDATES = 1;.

Ваш ответ

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