Какой оператор SQL используется для добавления новой строки в таблицу
Что проверяют
Вопрос-разминка: интервьюер убеждается, что вы вообще писали SQL руками, а не только смотрели на таблицы через интерфейс. Правильное слово тут даёт ноль баллов, а вот развёрнутый ответ переводит разговор на транзакции, ограничения и подготовку тестовых данных. Следом обычно спрашивают, как проверить, что строка действительно вставилась, и как убрать её за собой.
Как отвечать
Скажите про INSERT и сразу покажите формы, которые нужны в работе:
- базовая:
INSERT INTO users (name, email) VALUES ('Иван', 'ivan@example.com');перечисляйте колонки явно, иначе запрос сломается от любого изменения схемы; - несколько строк за раз: перечисление кортежей после
VALUES, это быстрее пачки отдельных запросов и выполняется одной операцией; - из выборки:
INSERT INTO orders_archive SELECT * FROM orders WHERE created_at < '2026-01-01';; - получить вставленное:
RETURNING idв PostgreSQL и SQLite,OUTPUT INSERTED.idв SQL Server,LAST_INSERT_ID()в MySQL; - вставка или обновление:
ON CONFLICT (email) DO UPDATEв PostgreSQL,ON DUPLICATE KEY UPDATEв MySQL,MERGEв SQL Server и Oracle.
Дальше добавьте то, что отличает тестировщика от новичка: значения по умолчанию и автоинкремент подставляются сами, поэтому такие колонки в списке не пишут; вставка, нарушающая NOT NULL, UNIQUE, CHECK или внешний ключ, падает целиком; в транзакции строку видно только вашему соединению до COMMIT, а ROLLBACK удобно использовать, чтобы тестовые данные не оставались в базе. Массовую загрузку делают не через INSERT, а через COPY в PostgreSQL или LOAD DATA INFILE в MySQL.
Где спотыкаются
Пишут INSERT INTO t VALUES (...) без списка колонок. Такой запрос молча ломается, как только в таблицу добавят поле, и в автотестах это ловится не сразу.
Вставляют идентификатор вручную в колонку с автоинкрементом. Последовательность про это не знает, и следующая обычная вставка падает по уникальности.
Забывают про COMMIT или не чистят данные после прогона. В первом случае «строки нет» в другом соединении, во втором следующий запуск падает на дубликате.