Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонспектЛекций.doc
Скачиваний:
70
Добавлен:
14.05.2015
Размер:
1.26 Mб
Скачать

4. Операторы определения данных (основные сведения).

Создание, удаление и модификация таблиц.

Создание таблицы:

Синтаксис:

CREATE TABLE <имя_таблицы>

(<имя_столбца> {<тип_данных> | AS <выражение>}

{[DEFAULT <значение>] | [IDENTITY [(начальное значение, инкремент)]]}

{[NULL | NOT NULL] | [UNIQUE | PRIMARY KEY]}

[REFERENCES <имя главной таблицы> [(<имя столбца>)]]

, ...)

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

Наиболее часто используется повторяющаяся конструкция <имя столбца> <значение>:

NULL указывает на то, в этом столбце возможны неопределённые значения (естественно, такой столбец не может быть ключевым).

UNIQUE (ограничение целостности) указывает, что каждое значение в столбце является уникальным в пределах этого столбца. Для такого ограничения целостности автоматически создаётся индекс.

PRIMARY KEY – создаётся первичный ключ на базе соответствующего столбца. Для таблицы может быть создано только одно такое ограничение целостности.

DEFAULT – указывается значение по умолчанию для данного столбца.

IDENTITY – создаётся столбец-счётчик. Только один столбец может быть счётчиком.

REFERENCES – определяет, что столбец будет служить внешним ключом для таблицы, указанной с помощью параметра <имя главной таблицы>. Столбцы, входящие во внешний ключ, могут ссылаться только на столбцы первичного ключевого ограничения или ограничения UNIQUE. Дополнительно ограничение может быть уточнено ключевыми словами ON DELETE {CASCADE | NO ACTION} ON UPDATE {CASCADE | NO ACTION}

Примеры создания таблиц (работа с которыми была рассмотрена выше):

CREATE TABLE authors (au_id INT PRIMARY KEY, author CHAR(25) NOT NULL);

CREATE TABLE publishers (pub_id INT PRIMARY KEY, publisher VARCHAR(255) NOT NULL, url VARCHAR(255) DEFAULT ‘неизвестен’);

CREATE TABLE titles (title_id INT NOT NULL PRIMARY KEY, title CHAR(255) NOT NULL, yearpub INT, pub_id INT REFERENCES publishers(pub_id);

Создание таблицы с вычисляемыми полями:

CREATE TABLE MyTable (FirstCol int, SecondCol int, ThirdCol AS (FirstCol+SecondCol)/2.0)

Удаление таблицы:

Синтаксис:

DROP TABLE <имя_таблицы>

Модификация таблицы:

Команда ALTER TABLE берёт на себя все действия по копированию данных во временную таблицу, удалению старой таблицы, созданию вместо неё новой таблицы с нужной структурой и последующим переписыванием в неё данных. Все эти действия происходят без участия пользователя, при этом установленные права доступа к таблице сохраняются.

Добавление столбцов (синтаксис):

ALTER TABLE <имя_таблицы> ADD

(< возможное содержание аналогично содержимому в скобках для команды CREATE TABLE >

,...)

Удаление столбцов:

ALTER TABLE <имя_таблицы> DROP (<имя столбца>, …)

Модификация столбцов:

ALTER TABLE <имя_таблицы> MODIFY

(< возможное содержание аналогично содержимому в скобках для команды CREATE TABLE >

,...)

Пример:

ALTER TABLE MyTable ADD DateCol datetime DEFAULT GETDATE() NOT NULL UNIQUE

Создание, удаление и модификация индексов.

Когда в базе данных хранится большое количество информации, объём которой начинает исчисляться десятками тысяч записей, обычные подходы к поиску нужных данных, такие как полное сканирование таблиц, становятся неприемлемыми. Время, которое пришлось бы затратить на анализ всей таблицы, оказывается слишком велико. Индекс представляет собой средство, помогающее ускорить поиск необходимых данных за счет физического или логического их упорядочения. Физически индекс представляет собой специальным образом упорядоченный набор значений из индексированного столбца с указателями на места физического размещения исходных записей в структуре базы данных.

К настоящему времени разработаны эффективные математические алгоритмы поиска данных в упорядоченной последовательности. Одним из таких алгоритмов является метод половинного деления. В простейшем варианте для поиска любого значения берётся начальное приближение в середине упорядоченной последовательности значений, и хранимая в ней величина сравнивается с искомым значением. Если искомая величина меньше выбранного значения, то дальнейшему делению пополам подвергается первая половина списка, иначе – вторая. Поиск заканчивается, как только достигнуто совпадение искомой величины и анализируемого значения.

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

Создание индекса (синтаксис):

CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)

Пример:

CREATE INDEX au_index ON authors (au_id);

CREATE INDEX title_index ON titles (title_id);

Удаление индекса:

DROP INDEX <имя_индекса>