Изменение и удаление таблиц
Описание данных на основе 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; просмотров: 252;