Операторы Описания Данных.
1. Операторы Описания Данных.
Операторы описания данных предназначены для описания (создания), изменения описания и уничтожения объектов базы данных.
В SQL различаются следующие виды объектов:
- база данных (database);
- таблица (table);
- столбец (column);
- индекс (index);
- снимок (view);
- синоним (synonym).
Каждый объект имеет собственное имя - идентификатор. Каждый объект имеет владельца - т.е. того пользователя, который его создал. Имя объекта можно уточнять с помощью имени его владельца (owner-name) в такой форме: moshkow.table1
Ниже приводятся примеры использования всех операторов описания данных. Полный же их синтаксис можно найти в "Кратком справочнике по 4GL", либо в "Справочном руководстве по INFORMIX-4GL".
Создание базы данных. CREATE DATABASE zawod
В любой момент времени вы можете иметь доступ к объектами только одной - ТЕКУЩЕЙ (CURRENT) - базы данных. Оператор DATABASE делает новую базу текущей, закрывая при этом доступ к объектам предыдущей текущей базы. Оператор CLOSE DATABASE просто закрывает текущую базу данных. DATABASE zawod . . . # текущей является база zawod DATABASE stanciq . . . # текущей является база stanciq CLOSE DATABASE # текущей базы нет
Создаются таблицы kadry и ceh, содержащие столбцы разных типов. CREATE TABLE kadry ( nomerceh INT, tabnom SERIAL , fio CHAR(20) UNIQUE, zarplata MONEY(16,2), datarovd DATE, pribytie DATETIME year TO minute )
CREATE TABLE ceh ( nomerceh int, nameceh char(20) )
В уже существующей таблице мы можем поменять тип столбца, добавить новый, уничтожить старый. ALTER TABLE kadry ADD (dolvnostx CHAR(20) BEFORE zarplata), DROP(pribytie), ADD CONSTRAINT UNIQUE(tabnom, fio) CONSTRAINT tabnomfio
ALTER TABLE items MODIFY (manu_code char(4))
Изменение структуры таблицы приводит к физическому преобразованию данных в ней. Если изменен тип столбца, то данные в нем преобразуются к новому типу, и если это невозможно осуществить, то оператор ALTER "валится" с кодом ошибки, а таблица остается в неизмененном состоянии.
View - "псевдо" таблица, базируется на существующих таблицах. CREATE VIEW poor AS SELECT tabnom, fio, datarovd FROM kadry WHERE zarplata < 120 # создано view - "псевдотаблица" из трех столбцов содержащая # строки из таблицы kadry, в которых zarplata меньше 120 рублей.
Ведет себя точно так же, как настоящая таблица, только место на диске под нее не отводятся, поскольку данные, лежащие в ней на самом деле хранятся в таблице, на которой это view базируется.
Индекс - дополнительная структура к столбцам таблицы, нужен для ускорения поиска значений в столбце. CREATE UNIQUE INDEX indkdtb ON kadry (tabnom) # создан индекс для столбца tabnom из таблицы kadry. Индекс # уникальный, значит в столбце не могут появиться одинаковые # значения.
Мы можем физически упорядочить таблицу в соответствии с индексом. В кластеризованной таблице SELECT работает быстрее. ALTER INDEX indkdtb TO CLUSTER
Имена столбцов в разных таблицах могут совпадать. Если в каком либо операторе SQL упоминаются два столбца с одинаковыми названиями, то их нужно уточнять именами таблиц, их содержащих. Перед именем любого объекта можно (а иногда и необходимо) указать имя его владельца (owner-name) - входное имя пользователя, который создал (CREATE) этот объект. kadry.nomerceh # столбец nomerceh из таблицы kadry ceh.nomerceh # столбец nomerceh из таблицы ceh iwanow.table1.c1 # столбец c1 из таблицы table1, владельцем которой является iwanow moshkow.table1.c1 # столбец c1 из другой (!) таблицы table1, владельцем которой является moshkow
Синоним для имени таблицы используется для сокращения записи. CREATE SYNONYM t1 FOR petrow.sostoqnie_postow
Теперь повсюду можно (хотя и не обязательно) вместо имени petrow.sostoqnie_postow использовать имя t1.
База данных может иметь системный журнал транзакций (logfile). START DATABASE zawod WITH LOG IN "/udd/moshkow/logfile/zawod"
Если нет журнала транзакций для всей базы данных, то для отдельных таблиц в базе с той же целью можно создать audit trail.CREATE AUDIT FOR kadry IN "/udd/moshkow/kadry.audit"
Естественно, что любой созданный в базе данных объект можно уничтожить. Надо только помнить, что операторы описания данных не откатываются назад, а потому если вы уничтожили таблицу, или базу данных то знайте, что это навсегда. DROP VIEW poor # Уничтожается только view. С данными в таблицах, на которых оно базировалось ничего не происходит. DROP TABLE kadry # уничтожает таблицу вместе с данными. DROP INDEX indkdtb DROP SYNONYM t1 DROP DATABASE zawod # уничтожает базу вместе со всеми данными и системным журналом