Изменение и удаление таблиц

Описание данных на основе SQL

Организация данных в InterBase. Типы данных

В каждом столбце таблицы хранятся данные одного определенного типа.

Описанные типы данных относятся именно к InterBase, хотя многие другие SQL-серверы имеют схожие с ним типы данных. В отличие от других серверов сервер InterBase:

- не имеет автоинкрементного типа данных и компенсирует его отсутствие особым механизмом генераторов;

- не имеет логического типа данных и вместо него предлагает использовать символьный тип Char(1) или VarChar(1);

- не имеет денежного типа данных;

- использует столбцы-массивы.

Обзор типов данных InterBase.

Типы столбцов, которые могут использоваться в таблицах сервера InterBase, перечислены в табл. 1.

Тип столбца Размер, байт Описание
SMALLINT   INTEGER   FLOAT     DOUBLE PRECISION             Целочисленные значения от -32 768 до +32 767 Целочисленные значения от -2 147 483 648 до +2 147 483 647   Вещественные числа до 7 значащих цифр в диапазоне от 3,4х10-38 до 3,4х10+38   Вещественные числа до 15 значащих цифр в диапазоне от 1,7x10-308 до 1,7х10+308
NUMERIC или DECIMAL Переменный Вещественные числа с фиксированной запятой. При определении этого типа дополнительно указывается общее количество значащих цифр числа и количество цифр в дробной части
CHAR(n) или CHARACTER   0-32 767 Текстовый столбец длиной до n символов
VARCHAR(n) или 0-32 767 Текстовый столбец переменной длины,
CHARACTER] VARYING     содержащий до n символов
DATE   Дата в пределах от 01.01.0100 до 11.12.5941. Также может хранить сведения о времени
BLOB Переменный Любой тип двоичных данных

 

Домены

Создание доменов

Перед тем, как создавать таблицы, которые ссылаются на домены, необходимо задать описания доменов при использовании команды CREATE DOMAIN. В результате ее выполнения создается шаблон, на который можно ссылаться в командах создания и модификации таблиц.

Синтаксис описания доменов:

CREATE DOMAIN<name_domain> [AS] <data_type> [DEFAULT{literal| NULL| USER}] [NOT NULL] [CHECK(<dom_condition>)];

где <name_domain> – имя создаваемого домена;

<data_type> – любой допустимый тип данных;

[DEFAULT{literal| NULL| USER}] – задание значения по умолчанию. Значение по умолчанию присваивается соответствующему атрибуту при создании новой строки в таблице, если его значение не указано явно. Literal – указывает значение явно; NULL – оставляет значение пустым; USER – имя пользователя, создавшего запись. Для полей типа дата можно указывать NOW – вводится текущая дата;

NOT NULL – запрещает ввод пустых значений;

CHECK (<dom_condition>) – задает ограничение (описание контроля данных при вводе и изменении).

Примеры:

CREATE DOMAIN USERNAME AS VARCHAR (20) DEFAULT USER;

CREATE DOMAIN MONTH AS SMALLINT CHECK (VALUE BETWEEN 1 AND 12);

CREATE DOMAIN D_ELEM AS CHAR (2) CHECK (VALUE IN (‘Au’, ‘Ag’, ‘Pt’, ‘Pd’, ‘Os’, ‘Rt’));

CREATE DOMAIN PVEIGHT AS NUMERIC (12,2) DEFAULT NULL CHECK ((VALUE IS NULL) OR (VALUE> 1.25));

Изменение доменов

Изменение доменов осуществляется командой ALTER DOMAIN. С помощью данной команды можно изменить любые характеристики домена, кроме типа данных и установок NOT NULL. Сделанные изменения воздействуют на атрибуты всех таблиц, где использовался измененный домен.

Команду ALTER DOMAIN может выдать либо создатель домена, либо пользователь с правами системного администратора.

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

Формат команды изменения домена:

ALTER DOMAINname_domain{[SET DEFAULT {literal|NULL|USER}] [DROP DEFAULT] [ADD [CONSTRAINT] CHECK (<dom_condition>)] [DROP CONSTRAINT]};

где [DROP DEFAULT]– удалить значение по умолчанию;

[ADD [CONSTRAINT] CHECK(<dom_condition>)] – добавить ограничение;

[DROP CONSTRAINT] – удалить ограничение.

Пример.

ALTER DOMAIN D_ELEM DROP CONSTRAINT;

ALTER DOMAIN D_ELEM ADD CHECK(VALUE IN (‘H’, ‘LI’, ‘NA’, ‘K’));

ALTER DOMAIN USERNAME SET DEFAULT ‘***’;

Удаление доменов

Удаление доменов осуществляется командой DROP DOMAIN. Если домен используется в каких-либо таблицах, то удалить его нельзя.

Формат описания команды:

DROP DOMAINname_domain;

Таблицы

Прежде чем перейти к созданию таблицы, необходимо провести проектирование базы данных. Далее следует создать комплект необходимых доменов и только затем можно переходить к созданию таблиц.

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

Для создания таблиц используется оператор CREATE TABLE, имеющий такой общий формат

CREATE TABLE <Имя_таблицы> [EXTERNAL [FILE] “<имя_файла>”]

(<опр_столбца> [, <опр_столбца> | <ограничение> ...]);

Здесь <опр_столбца> — определение столбца БД.

Определение столбца имеет такой формат:

<опр_столбца> = <имя_столбца> <тип_данных> | COMPUTED [BY]

(<выражение>) | <домен>]

[DEFAULT {<литерал>| NULL | USER}]

[NOT NULL] [<огранич_столбца>]

[COLLATE collation]

Здесь:

- <имя_столбца> — имя столбца;

- <тип_данных> — тип столбца (основные сведения о типах столбцов приведе­ны в уроке 11);

- COMPUTED [BY] (выражение>) — служит для определения столбца вычисляе­мых значений;

- <домен> — имя домена;

- DEFAULT — определяет значение, которое по умолчанию заносится в столбец

- при вставке новой записи;

- <огранич_столбца> — ограничения, накладываемые на значения столбца;

- COLLATE collation - определяет порядок сортировки символов (для сим­вольных столбцов).

Например:

CREATE TABLE T1

(Col1 Char(5) NOT NULL,

Col2 INT CHECK (Col2>0));

Изменение и удаление таблиц

Изменение ранее созданной таблицы осуществляется оператором ALTER TABLE, в котором дополнительно указывается характер действия спецификаторами ADD(добавить) или DROP(удалить). Добавлять можно только столбцы, удалять – столбцы и именованные ссылочные целостности. Например:

ALTER TABLE T1 ADD New_col VARCHAR(50); /*Добавление нового столбца*/

ALTER TABLE С DROP Cons_C; /* Удаление именованной ссылочной целостности */

Если необходимо изменить атрибуты какого-либо столбца (например, увеличить максимальное количество символов для текстового столбца), это можно сделать только за несколько этапов. Сначала создается временный столбец, атрибуты ко­торого полностью повторяют атрибуты изменяемого столбца, после чего данные из изменяемого столбца копируются во временный:

ALTER TABLE Р ADD Temp VARCHAR(50); UPDATE P SET Temp=New_Column

Затем изменяемый столбец удаляется и создается одноименный новый столбец с нуж­ными атрибутами, после чего данные из временного столбца переносятся в новый:

ALTER TABLE Р DROP New_Column;

ALTER TABLE P ADD New_Column VARCHAR(70);

UPDATE P SET New_Column=Temp;

ALTER TABLE P DROP Temp

Удаление таблиц реализуется оператором DROP TABLE:

DROP TABLE MyTable

Данные из удаленной таблицы, а также связанные с ней индексы, ссылочные це­лостности и ограничения безвозвратно теряются. Удаление таблицы будет блоки­ровано, если объявлена затрагивающая ее ссылочная целостность ON DELETE NO ACTION, а в дочерней таблице есть ссылающиеся на нее записи.

Индексы

Создание индексов

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

Для создания индекса используется оператор CREATE INDEX следующего формата:

CREATE [UNIQUE] { [ASC[ENDING] | DESC[ENDING] } INDEX

<Имя индекса> ON <Имя таблицы>(<Столбец1> [, <Столбец2> [, … ]] )

- UNIQUE – создается уникальный индекс;

- ASC[ENDING] – значения индекса сортируются по возрастанию (спецификатор по умолчанию);

- DESC [ENDING] — значения сортируются по убыванию;

- <Имя_индекса> — имя индекса (должно быть уникальным среди всех осталь­ных имен индексов в БД);

- <Имя_таблицы> — имя таблицы, для которой создается индекс;

- <CтoлбeцN> — имя входящего в индекс столбца.

В следующем примере создается убывающий индекс по столбцу NSum для табли­цы Nakls:

CREATE DESC INDEX NSum_Nakls ON Nakls(NSum)

В SQL-запросах нельзя указать имя индекса, призванного ускорить выполнение запроса: сервер автоматически оптимизирует план выполнения запроса и в макси­мальной степени задействует существующие индексы (в компонентах ТТаblе при работе с серверными таблицами БД можно явно указать используемый индекс в свойстве indexName или indexFieldNames).

Если поиск (сортировка) записей идет по двум и более столбцам одновременно, полезно создать составной индекс, который способен существенно ускорить вы­полнение запроса:

CREATE INDEX Complex_Nakls ON Nakls{NFirm, NDate)

<== предыдущая лекция | следующая лекция ==>
Мотивация исполнителя | Хранимые процедуры и их назначение

Дата добавления: 2022-02-05; просмотров: 198;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.029 сек.