Изменение таблиц. Добавление строки. Копирование строк из таблицы. Команда UPDATE, страница 5

Примечание. В соответствии с требованиями SQL условие не может содержать функцию получения времени или имени пользователя.  Некоторые СУБД разрешают: функция CURRENT_TIMESTAMP (Microsoft SQL Server, PostgreSQL), Now() (Access).

Примечание. Microsoft SQL Server, Oracle применяют пользовательские типы данных – стандартные типы с ограничениями. Такой способ имеет преимущество в том, что тип данных создается один раз и нет необходимости повторять ограничения на значения.

Создание временной таблицы

Создаваемые таблицы хранятся пока не будут уничтожены командой DROP. SQL позволяет создавать таблицы для промежуточных результатов:

- результаты сложного запроса для применении в других запросах;

- копия таблицы (в определенный момент времени);

- результат подзапроса (например, для внешних соединений).

Временная таблица уничтожается после завершения сессии. Различают глобальную и локальную временные таблицы. Временная таблица создается командой CREATE [GLOBAL | LOCAL] TEMPORARY TABLE. Можно удалит таблицу до завершения сессии командой DROP TABLE. Временная таблица может имеет то же имя, что и базовая. Тогда она будет подменять базовую, пока не будет удалена.

Microsoft Access не поддерживает временные таблицы. Не все СУБД поддерживают глобальные таблицы (доступные всем активным сессиям).

Создание таблицы по результатам запроса

Команда SELECT колонки INTO новая_таблица FROM таблица [WHERE условие] создает таблицу по образу существующей (проекция) и заполняет строками, полученными в результате выполнения запроса. В отличие от команды INSERT SELECT, импортирующей строки в существующую таблицу, SELECT INTO экспортирует строки из существующей таблицы. Результат помещается в одну таблицу, хотя в запросе может быть соединено несколько таблиц.

Команду можно использовать для быстрого копирования структуры, если задать невыполнимое условие. Можно заполнить и временную таблицу.

Изменение таблицы

В таблицу можно добавить, удалить либо изменить столбцы командой ALTER TABLE. Команда имеет формат:

ALTER TABLE таблица действие;

Действие начинается с ключевого слова ADD, DROP, ALTER.

Добавляются/удаляются столбцы или ограничения.

ADD имя столбца тип

DROP COLUMN имя_столбца

ADD определение_ограничения

DROP CONSTRAINT имя_ограничения

Индексы

Индекс представляет собой список, где каждое значение из индексируемого столбца хранится вместе с адресом (физическим расположением) строки, содержащей это значение. СУБД использует индексы для выполнения поиска. Индексы бывают простые и сложные. Индексы создаются для столбцов, которые:

- часто используются при поиске,

- часто сортируются,

- регулярно применяются в объединениях.

Не рекомендуется создавать индексы для столбцов, которые:

- содержат небольшое число вариантов значений (пол, штат),

- редко применяются в запросах, принадлежат таблице с небольшим числом строк.

НЕ следует создавать избыточные индексы, поскольку увеличивается время на их обновление при изменении таблицы.

Индекс также может служить средством обеспечения уникальности. Уникальный индекс требует уникальности значений в столбце (либо комбинаций значений в столбцах для сложного индекса). Уникальный индекс создается автоматически при задании первичного ключа или ограничения уникальности. СУБД может автоматически создавать индексы для внешних ключей.

Поскольку индексы не описаны в стандарте SQL-92, команды (кроме CREATE INDEX) различаются в разных СУБД. Индекс создается командой:

CREATE [UNIQUE] INDEX название_индекса ON таблица (индексируемые_ столбцы)

Названия индексов должны быть уникальными в БД для СУБД Oracle, PostgreSQL.

Индекс представляет собой физический механизм для ускорения доступа к данным. Поэтому его не следует считать эквивалентным термину «ключ». Ключ – логический принцип для сохранения ссылочной целостности. Индексы сохраняются в индексных файлах.