Вопрос проверяет понимание возможностей SQL и способов выполнения связанных операций вставки.
В стандартном SQL напрямую вставить данные в несколько таблиц одним простым INSERT нельзя. Однако можно использовать транзакции или CTE с RETURNING, чтобы выполнить связанные вставки в одном запросе. Это часто применяется в PostgreSQL. Такой подход позволяет сохранить целостность данных.
Часто требуется вставить данные в несколько таблиц, например:
сначала создать запись пользователя
затем создать связанные записи
Самый распространённый способ:
BEGIN;
INSERT INTO users (...) VALUES (...);
INSERT INTO profiles (...) VALUES (...);
COMMIT;
Это гарантирует:
Целостность данных
Откат при ошибке
Определение:
CTE (Common Table Expression) — это временный результат запроса, который можно использовать далее.
Пример:
WITH new_user AS (
INSERT INTO users(name)
VALUES ('Ivan')
RETURNING id
)
INSERT INTO profiles(user_id)
SELECT id FROM new_user;
Это позволяет:
Выполнить несколько вставок
Передать данные между ними
Типичные случаи:
Создание связанных сущностей
Генерация ID
Связанные записи
Важно учитывать:
Не все СУБД поддерживают CTE одинаково
Сложные запросы труднее поддерживать
Вставка в несколько таблиц возможна через транзакции или CTE. В PostgreSQL CTE с RETURNING — удобный способ связать несколько операций в одном запросе.