Создание временной таблицы как копии постоянной в SQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Хотите создать временную таблицу, которая имеет ту же структуру, что и основная? Воспользуйтесь методом "SELECT INTO". Выражение SELECT TOP 0 * INTO #TempTable FROM OriginalTable; позволит создать пустую временную таблицу #TempTable, которая структурно соответствует OriginalTable.

SQL
Скопировать код
/* Давайте приступим! */
SELECT TOP 0 * INTO #TempTable FROM OriginalTable;

Такой подход позволяет быстро скопировать структуру таблицы, не охватывая данные.

Кинга Идем в IT: пошаговый план для смены профессии

Как сделать процесс еще более эффективным?

Для улучшения производительности и оптимизации использования возможностей SQL Server, команда SELECT INTO оказывается очень экономичной по времени. Подобный функционал предлагается и в PostgreSQL:

SQL
Скопировать код
/* Привет, PostgreSQL, ты тоже можешь так делать! */
CREATE TEMP TABLE temp_table AS SELECT * FROM original_table LIMIT 0;

Этим методом создается временная таблица temp_table, полностью соответствующая original_table по столбцам, но без данных. Это можно обозначить как клонирование структуры.

Замечание: ограничения в связи с первичными ключами

Обратите внимание, что указанный метод не копирует первичные ключи и ограничения. Структура таблицы воспроизводится без указанных элементов, что напоминает структурный план без соблюдения строительных норм и правил.

В PostgreSQL временная таблица будет находиться в специальной схеме сессии, например 'pg_temp_3'. Это обеспечивает важный уровень изоляции и безопасности данных.

Подробнее: чего нет в копии?

Копия временной таблицы лишена некоторых свойств оригинальной таблицы. Переносится структура столбцов, но отсутствуют связанные с ней атрибуты, связанные с индексацией и ограничениями. Вот что часто отсутствует:

  • Индексы: отсутствие индексов на временных таблицах может сделать их работу менее оптимальной.
  • Ограничения: отсутствие защиты от некорректного ввода данных.
  • Триггеры: они не будут автоматически отрабатывать на изменение данных.
  • Идентификаторы строк: первичные ключи и уникальные идентификаторы придется устанавливать снова.

Визуализация

Создание временной таблицы можно представить как пошив вещи по образцу из существующего гардероба:

Markdown
Скопировать код
Оригинальная рубашка (👔): [Рукав, Воротник, Пуговица]

Портной-клонировщик (👷‍♂️):
1. Снять мерки с оригинальной рубашки 👔
2. Выкроить такую же модель из ткани 📐
3. Сшить "клон" рубашки 👕
SQL
Скопировать код
/* И это ваша новая рубашка: тот же фасон, но без украшений! */
CREATE TABLE temp_table AS 
SELECT * 
FROM original_table
WHERE 1=0;

Суть в том, что нам не нужен новый дизайн – важно успешно скопировать проверенное решение, сохраняя "модель" (метаданные), но не "материал" (данные).

Код для разных вариантов SQL

Посмотрим, как создаются временные таблицы в разных версиях SQL:

SQL Server

SQL Server предоставляет возможность создавать временные таблицы с использованием SELECT INTO:

SQL
Скопировать код
/* Копирование на уровне администратора! */
SELECT TOP 0 *
INTO #CoolTempTable
FROM OriginalStylishTable;

PostgreSQL

Пользователям PostgreSQL, предпочитающим синонимы, стоит обратить внимание на этот синтаксис:

SQL
Скопировать код
/* PostgreSQL говорит: "Я могу взять твое задание, но сделать его немного по-своему." */
CREATE TEMP TABLE cool_temp_table AS 
SELECT * 
FROM original_stylish_table 
LIMIT 0;

MySQL

MySQL предлагает аналогичный метод, со временными таблицами для сессионного использования:

SQL
Скопировать код
/* Версия MySQL, которая будет недоступна для всех, кроме вас */
CREATE TEMPORARY TABLE cool_temp_table AS 
SELECT * 
FROM original_stylish_table 
WHERE FALSE;

Работа с нестандартными случаями

Иногда создаваемая временная таблица должна иметь некоторые отличия:

  • Переименование столбцов: примените алиасы в запросе SELECT для более понятных названий столбцов.
  • Изменение типов данных: меняйте типы данных с помощью CAST или CONVERT.
  • Идентификаторы строк: добавляйте дополнительные столбцы к запросу SELECT, имитируя столбцы идентичности или уникальные идентификаторы.

Полезные материалы

  1. Временные таблицы в SQL Server – Simple Talk — подробное руководство по лучшим практикам и основам работы с временными таблицами в SQL Server.
  2. PostgreSQL: Документация: CREATE TABLEофициальное руководство PostgreSQL по команде CREATE TABLE, включая подсказки по созданию временных таблиц.
  3. Руководство по MySQL 8.0: CREATE TEMPORARY TABLE — основной источник знаний о создании и управлении временными таблицами в MySQL.
  4. SQLite CREATE TABLE — детальное руководство по созданию таблиц в SQLite, также актуальное для временных таблиц.
  5. IBM Documentation on DB2 Temporary Tablesподробный гайд от IBM по использованию временных таблиц в DB2.