INSERT, UPDATE, DELETE и DDL — только в песочнице. Риски

Всю эту главу мы только ЧИТАЛИ данные из базы — SELECT в разных видах. Но иногда тестировщику нужно подготовить тестовые данные: добавить пользователя, изменить статус заказа, удалить старую запись. Для этого есть команды INSERT, UPDATE, DELETE и DDL — и с ними связан главный риск этого урока: их легко выполнить не там, где нужно, и необратимо всё сломать.

Чему научишься за этот урок:
— называть команды INSERT, UPDATE, DELETE и объяснять, что каждая делает;
— объяснять, что такое DDL и почему это самые опасные команды;
— формулировать золотое правило безопасности — только в песочнице, никогда на проде;
— применять привычку проверки через SELECT перед UPDATE/DELETE.

INSERT — добавить строку

INSERT добавляет новую строку в таблицу:

INSERT INTO users (name, email)
VALUES ('Тест Тестов', 'test@example.com');

UPDATE — изменить строки

UPDATE изменяет существующие строки:

UPDATE users SET email = 'new@example.com' WHERE id = 5;

Критически важно: UPDATE ВСЕГДА должен идти с WHERE. Если забыть WHERE, команда изменит ВСЕ строки таблицы разом — а не одну строку, которую вы имели в виду.

DELETE — удалить строки

DELETE удаляет строки:

DELETE FROM users WHERE id = 5;

Та же опасность, что и у UPDATE: DELETE без WHERE удалит ВСЕ строки таблицы.

DDL — меняем саму структуру базы

DDL (Data Definition Language) — команды, меняющие саму СТРУКТУРУ базы, а не данные: CREATE TABLE, ALTER TABLE, DROP TABLE. Это самые опасные команды: DROP TABLE полностью уничтожает таблицу вместе со всеми данными. Ручной тестировщик обычно НЕ выполняет DDL-команды на реальных данных проекта.

Золотое правило безопасности

INSERT, UPDATE, DELETE и DDL выполняются ТОЛЬКО в тестовой базе данных (песочнице), НИКОГДА на боевой (production) базе с реальными данными пользователей. Забытый WHERE в UPDATE или DELETE на проде может необратимо испортить или удалить данные реальных людей.

Привычка: сначала SELECT, потом UPDATE/DELETE

Прежде чем выполнить UPDATE или DELETE с условием, полезная привычка — сначала выполнить SELECT С ТЕМ ЖЕ САМЫМ условием в WHERE. Так вы увидите, какие именно строки попадут под изменение или удаление, и только убедившись, что это именно те строки, которые нужны, выполняете сам UPDATE или DELETE.

Шаг 1 (проверка): SELECT * FROM users WHERE id = 5;
-> смотрим - это точно та строка?

Шаг 2 (само действие): DELETE FROM users WHERE id = 5;
-> выполняем, только убедившись в шаге 1

Итог:
— INSERT добавляет строку, UPDATE изменяет существующие строки, DELETE удаляет строки;
— UPDATE и DELETE без WHERE затронут ВСЕ строки таблицы — это критическая ошибка;
— DDL (CREATE/ALTER/DROP TABLE) меняет структуру базы, DROP TABLE уничтожает таблицу целиком;
— золотое правило: изменяющие команды — только в песочнице, никогда на проде;
— перед UPDATE/DELETE полезно сначала выполнить SELECT с тем же WHERE, чтобы увидеть, что именно затронется.

Контрольный вопрос. Что делает команда INSERT?

АДобавляет новую строку в таблицу
БИзменяет существующие строки
ВУдаляет строки из таблицы

Подсказка: Название команды прямо говорит о том, что она делает со строкой — вставляет её.

Проверить ответ →

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

Контрольный вопрос. Что произойдёт, если выполнить UPDATE users SET email = ‘x@example.com’; БЕЗ условия WHERE?

АEmail изменится у ВСЕХ строк таблицы users
БНичего не произойдёт, команда завершится с ошибкой
ВEmail изменится только у первой строки таблицы

Подсказка: В уроке прямо сказано, что происходит с UPDATE, если забыть WHERE.

Проверить ответ →

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

Контрольный вопрос. Что такое DDL (Data Definition Language)?

АКоманды, меняющие саму структуру базы данных (CREATE, ALTER, DROP TABLE)
БКоманды, которые только читают данные из таблиц
ВЯзык программирования для написания автотестов

Подсказка: В названии — «Definition», то есть про определение структуры, а не про данные внутри.

Проверить ответ →

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

Контрольный вопрос. На какой базе данных можно безопасно выполнять UPDATE, DELETE и DDL?

АТолько на тестовой базе данных (песочнице)
БНа боевой (production) базе, если действовать аккуратно
ВНа любой базе, если запрос короткий

Подсказка: В уроке это названо «золотым правилом безопасности» — вспомни его формулировку.

Проверить ответ →

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

Контрольный вопрос. Про безопасную работу с изменяющими SQL-командами в уроке сказано следующее. Какие из утверждений верны (выбери все подходящие)?

Выберите все верные варианты.

АDELETE без WHERE удалит все строки таблицы
БПеред UPDATE или DELETE с условием полезно сначала выполнить SELECT с тем же WHERE
ВDROP TABLE удаляет только часть данных, но сохраняет структуру таблицы
ГРучной тестировщик обычно не выполняет DDL-команды на реальных данных проекта

Подсказка: Сверь каждое утверждение с разделами «DELETE» и «DDL» — одно из четырёх занижает реальные последствия DROP TABLE.

Проверить ответ →

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

Контрольный вопрос. Какая DDL-команда полностью уничтожает таблицу вместе со всеми данными? Ответь двумя словами по-английски заглавными буквами, как в уроке.

Подсказка: Это самая опасная из трёх DDL-команд, названных в уроке.

Проверить ответ →

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

Задание. Нужно добавить нового тестового пользователя с именем ‘QA Тест’ и email ‘qa@example.com’ в таблицу users(id, name, email). Напиши SQL-команду.

Подсказка: Нужна команда INSERT INTO с указанием столбцов и VALUES.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Задание. Даны два запроса к таблице users(id, name, email): (1) UPDATE users SET email = ‘a@example.com’ WHERE id = 3; (2) UPDATE users SET email = ‘a@example.com’; Какой из двух безопасен для выполнения — измени только одну строку с id=3, не затронув остальные? Ответь номером запроса.

Подсказка: Проверь, у какого из двух запросов есть условие WHERE.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Задание. Тестировщику нужно выполнить DELETE FROM enrollments WHERE user_id = 42; на боевой (production) базе продукта, чтобы очистить тестовую запись. Объясни в 2-3 предложениях: правильно ли так делать, и что нужно сделать вместо этого?

Критерий приёмки: объяснено, что выполнять DELETE (и любые изменяющие команды) на боевой базе с реальными данными пользователей НЕЛЬЗЯ — это нарушает золотое правило безопасности; вместо этого такую проверку нужно выполнять на тестовой базе данных (песочнице), а если тестовые данные реально оказались на проде — это отдельная ситуация, требующая согласования, а не самостоятельного DELETE тестировщиком.

Подсказка: Вспомни золотое правило урока: где можно выполнять изменяющие команды, а где — категорически нет.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Задание. Коллега-тестировщик хочет выполнить команду DELETE FROM enrollments; (без WHERE) в тестовой базе данных, чтобы «очистить старые тестовые записи перед новым прогоном тестов». Объясни: (а) что именно произойдёт при выполнении этой команды в её текущем виде; (б) почему это опасно, даже если база тестовая, а не боевая; (в) какие два шага стоит сделать перед выполнением похожей команды, чтобы избежать случайной потери нужных данных.

Критерий приёмки: (а) названо, что команда удалит ВСЕ строки таблицы enrollments целиком, а не только «старые тестовые»; (б) объяснено, что даже на тестовой базе среди записей могут быть данные, нужные для других текущих тестов или для настроенного тестового окружения коллег, — потеря которых сорвёт чужую работу, поэтому «это же не прод» не отменяет риска; (в) названы шаги: сначала выполнить SELECT с планируемым условием WHERE (например по дате или явному признаку «старая тестовая»), чтобы увидеть, какие строки реально попадут под удаление, и добавить в саму команду DELETE конкретное условие WHERE вместо удаления всей таблицы.

Подсказка: Тестовая база не значит «можно всё» — там тоже могут быть чужие нужные данные; вспомни привычку СНАЧАЛА SELECT, ПОТОМ действие.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Что дальше

Это был последний урок главы «SQL и данные для тестировщика». Глава дала полный набор навыков работы с базой данных: зачем тестировщику вообще нужен SQL и как читать схему из таблиц, ключей и связей; как писать первые запросы SELECT, WHERE, LIKE, ORDER BY и LIMIT; как использовать функции для работы со строками и датами; как соединять несколько таблиц через JOIN; как считать агрегаты COUNT, SUM, AVG, MAX, MIN по группам через GROUP BY; как решать задачи подзапросами и когда это оправдано вместо JOIN; и, наконец, как безопасно (или, вернее, когда категорически НЕ безопасно) менять данные и структуру базы через INSERT, UPDATE, DELETE и DDL. Дальше в курсе — глава «Исследовательское тестирование»: она откроет исследовательский подход к тестированию — без заранее написанных тест-кейсов, на основе свободного изучения продукта.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева