← Все вопросы
Как безопасно обновлять и удалять строки в SQL (UPDATE/DELETE и WHERE)?
17
Боюсь делать UPDATE и DELETE на рабочей базе. Слышал, что можно случайно снести всю таблицу. Как правильно и не выстрелить себе в ногу?
3 ответа
26
✓ Принятый ответ — помог автору
Главная ловушка: UPDATE/DELETE БЕЗ WHERE затрагивают ВСЕ строки таблицы.
DELETE FROM users; -- ❌ удалит вообще всех
DELETE FROM users WHERE id = 7; -- ✅ только одного
Мои привычки, чтобы не угробить базу:
- Сначала пишу тот же
WHEREвSELECTи смотрю, какие строки попадут. - Только потом меняю
SELECT *наUPDATE ... SET/DELETE. - На проде работаю в транзакции:
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;.
Ваш ответ
Войдите, чтобы ответить на вопрос.