Создание временной таблицы как копии постоянной в SQL
Быстрый ответ
Хотите создать временную таблицу, которая имеет ту же структуру, что и основная? Воспользуйтесь методом "SELECT INTO". Выражение SELECT TOP 0 * INTO #TempTable FROM OriginalTable;
позволит создать пустую временную таблицу #TempTable
, которая структурно соответствует OriginalTable
.
/* Давайте приступим! */
SELECT TOP 0 * INTO #TempTable FROM OriginalTable;
Такой подход позволяет быстро скопировать структуру таблицы, не охватывая данные.
Как сделать процесс еще более эффективным?
Для улучшения производительности и оптимизации использования возможностей SQL Server, команда SELECT INTO
оказывается очень экономичной по времени. Подобный функционал предлагается и в PostgreSQL:
/* Привет, PostgreSQL, ты тоже можешь так делать! */
CREATE TEMP TABLE temp_table AS SELECT * FROM original_table LIMIT 0;
Этим методом создается временная таблица temp_table
, полностью соответствующая original_table
по столбцам, но без данных. Это можно обозначить как клонирование структуры.
Замечание: ограничения в связи с первичными ключами
Обратите внимание, что указанный метод не копирует первичные ключи и ограничения. Структура таблицы воспроизводится без указанных элементов, что напоминает структурный план без соблюдения строительных норм и правил.
В PostgreSQL временная таблица будет находиться в специальной схеме сессии, например 'pg_temp_3'. Это обеспечивает важный уровень изоляции и безопасности данных.
Подробнее: чего нет в копии?
Копия временной таблицы лишена некоторых свойств оригинальной таблицы. Переносится структура столбцов, но отсутствуют связанные с ней атрибуты, связанные с индексацией и ограничениями. Вот что часто отсутствует:
- Индексы: отсутствие индексов на временных таблицах может сделать их работу менее оптимальной.
- Ограничения: отсутствие защиты от некорректного ввода данных.
- Триггеры: они не будут автоматически отрабатывать на изменение данных.
- Идентификаторы строк: первичные ключи и уникальные идентификаторы придется устанавливать снова.
Визуализация
Создание временной таблицы можно представить как пошив вещи по образцу из существующего гардероба:
Оригинальная рубашка (👔): [Рукав, Воротник, Пуговица]
Портной-клонировщик (👷♂️):
1. Снять мерки с оригинальной рубашки 👔
2. Выкроить такую же модель из ткани 📐
3. Сшить "клон" рубашки 👕
/* И это ваша новая рубашка: тот же фасон, но без украшений! */
CREATE TABLE temp_table AS
SELECT *
FROM original_table
WHERE 1=0;
Суть в том, что нам не нужен новый дизайн – важно успешно скопировать проверенное решение, сохраняя "модель" (метаданные), но не "материал" (данные).
Код для разных вариантов SQL
Посмотрим, как создаются временные таблицы в разных версиях SQL:
SQL Server
SQL Server предоставляет возможность создавать временные таблицы с использованием SELECT INTO
:
/* Копирование на уровне администратора! */
SELECT TOP 0 *
INTO #CoolTempTable
FROM OriginalStylishTable;
PostgreSQL
Пользователям PostgreSQL, предпочитающим синонимы, стоит обратить внимание на этот синтаксис:
/* PostgreSQL говорит: "Я могу взять твое задание, но сделать его немного по-своему." */
CREATE TEMP TABLE cool_temp_table AS
SELECT *
FROM original_stylish_table
LIMIT 0;
MySQL
MySQL предлагает аналогичный метод, со временными таблицами для сессионного использования:
/* Версия MySQL, которая будет недоступна для всех, кроме вас */
CREATE TEMPORARY TABLE cool_temp_table AS
SELECT *
FROM original_stylish_table
WHERE FALSE;
Работа с нестандартными случаями
Иногда создаваемая временная таблица должна иметь некоторые отличия:
- Переименование столбцов: примените алиасы в запросе
SELECT
для более понятных названий столбцов. - Изменение типов данных: меняйте типы данных с помощью
CAST
илиCONVERT
. - Идентификаторы строк: добавляйте дополнительные столбцы к запросу
SELECT
, имитируя столбцы идентичности или уникальные идентификаторы.
Полезные материалы
- Временные таблицы в SQL Server – Simple Talk — подробное руководство по лучшим практикам и основам работы с временными таблицами в SQL Server.
- PostgreSQL: Документация: CREATE TABLE — официальное руководство PostgreSQL по команде CREATE TABLE, включая подсказки по созданию временных таблиц.
- Руководство по MySQL 8.0: CREATE TEMPORARY TABLE — основной источник знаний о создании и управлении временными таблицами в MySQL.
- SQLite CREATE TABLE — детальное руководство по созданию таблиц в SQLite, также актуальное для временных таблиц.
- IBM Documentation on DB2 Temporary Tables — подробный гайд от IBM по использованию временных таблиц в DB2.