Временная таблица — это объект базы данных, который хранится и управляется системой базы данных на временной основе. Временные таблицы бывают локальными или глобальными. Локальные временные таблицы представлены физически, т.е. они хранятся в системной базе данных tempdb. Имена временных таблиц начинаются с префикса #, например #table_name.
Временная таблица принадлежит создавшему ее сеансу, и видима только этому сеансу. Такая таблица автоматически удаляются после завершения сессии или завершения транзакции. Они часто используются для временного хранения данных или результатов промежуточных вычислений.
Глобальные временные таблицы видимы любому пользователю и любому соединению и удаляются после отключения от сервера базы данных всех обращающихся к ним пользователей. В отличие от локальных временных таблиц имена глобальных временных таблиц начинаются с префикса ##. В примере ниже показано создание временной таблицы в SQL Server, называющейся project_temp, используя две разные инструкции языка Transact-SQL:
NameUSE SampleDb;
CREATE TABLE #project_temp (
Number NCHAR(4) NOT NULL,
Name NCHAR(25) NOT NULL
);
-- Аналог предыдущей инструкции со вставкой
-- данных во временную таблицу из существующей
-- таблицы Project
SELECT Number, ProjectName
INTO #project_temp
FROM Project;
Два этих подхода похожи в том, что в обоих создается локальная временная таблица #project_temp. При этом таблица, созданная инструкцией CREATE TABLE, остается пустой, а созданная инструкцией SELECT заполняется данными из таблицы Project.
Синтаксис создания временной таблицы в СУБД SoQoL:
Временные таблицы в SOQOL реализованы в двух
вариантах:
– глобальные — GLOBAL TEMPORARY TABLE;
– приватные — PRIVATE TEMPORARY TABLE.
Синтаксис создания приватной временной таблицы:
CREATE PRIVATE TEMPORARY TABLE <имя_таблицы> (
<имя_столбца><тип_данных>[[<свойства_столбца>][<ограничение_столбца>]
[, <имя_столбца><тип_данных>[<свойства_столбца>][<ограничение_столбца>], ...]
[, <ограничение_таблицы>]])
[ON COMMIT PRESERVE DEFINITION | ON COMMIT DROP DEFINITION];
Синтаксис создания глобальной временной таблицы:
CREATE GLOBAL TEMPORARY TABLE <имя_таблицы> (
<имя_столбца><тип_данных>[[<свойства_столбца>][<ограничение_столбца>]
[, <имя_столбца><тип_данных>[<свойства_столбца>][<ограничение_столбца>], ...]
[, <ограничение_таблицы>]])
[ON COMMIT PRESERVE ROWS | ON COMMIT DELETE ROWS];
Где:
– PRIVATE — указывает на создание приватной временной таблицы;
– GLOBAL — указывает на создание глобальной временной таблицы;
– <имя_таблицы> — имя создаваемой временной таблицы.
Синтаксис создания временной таблицы в СУБД ЛИНТЕР:
<определение таблицы «в памяти»>::=
CREATE [IF NOT EXISTS | OR REPLACE]
TABLE [<имя схемы>.]<имя таблицы>(<атрибуты таблицы>)
IN-MEMORY [[NO] AUTOSAVE] [[NO] AUTOLOAD]
Примечание
По умолчанию СУБД ЛИНТЕР не предусматривает работу с таблицами «в памяти». Для поддержки этой функциональности необходимо:
• сконфигурировать СУБД с помощью утилиты gendb (см. документ «СУБД
ЛИНТЕР. Создание и конфигурирование базы данных», подпункт «Установка
параметров конфигурирования», команды SET IN-MEMORY TABLES, SET IN-
MEMORY COLUMNS, SET IN-MEMORY FILES);
• при каждом запуске ядра СУБД ЛИНТЕР указывать ключ /INMEMPOOL=<размер>,
где <размер> задает максимально допустимое количество страниц в пуле страниц ядра
СУБД ЛИНТЕР, выделяемых для размещения таблиц «в памяти». Если этот ключ не
задан, то использование таблиц «в памяти» запрещено.
• в случае активной работы с таблицами «в памяти» рекомендуется увеличить размер
памяти канала, выполнив команду
ALTER DATABASE SET CHANNEL MEMORY LIMIT 1048576;
Временные таблицы: чем они могут быть полезны?
- Хранение промежуточных результатов. Если вы выполняете сложные вычисления или операции над данными и хотите сохранить результаты для дальнейшего использования, временные таблицы могут помочь.
- Работа с большим объемом данных. Использование временных таблиц может снизить нагрузку на сервер, так как они существуют только во время запроса и не сохраняются постоянно.
- Обеспечение изоляции данных. Временные таблицы обеспечивают изоляцию данных для каждой сессии или транзакции, что может быть полезно, если вам нужно временно сохранить данные для одного пользователя или процесса.
В целом, временные таблицы позволяют временно хранить и обрабатывать данные без необходимости создавать постоянные таблицы.