Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МР - занятие № 2.doc
Скачиваний:
2
Добавлен:
24.08.2019
Размер:
308.22 Кб
Скачать
    1. Каталог

В языке SQL существует аналог того, что принято называть каталогов – информационная схема. Здесь это понятие имеет свой специфический смысл. Нестрого говоря, каталог в языке SQL состоит из дескрипторов (метаданных) для отдельной базы данных, а схема состоит из дескрипторов той части базы данных, которая принадлежит отдельному пользователю. Другими словами, в системе может быть любое число каталогов (по одному для каждой базы данных), каждый из которых делится на произвольное число схем. Однако каждый каталог должен содержать ровно схему с именем INFORMATION_SHEMA (информационная схема), которая, с точки зрения пользователя, и является схемой, выполняющей функции обычного каталога.

Таким образом, информационная схема состоит из набора SQL-таблиц, содержимое которых фактически отражает все определения из всех остальных схем данного каталога.

Приведем некоторые из наиболее важных представлений информационной схемы:

SCHEMA

(схемы)

DOMAINS

(домены)

TABLES

(таблицы)

VIEWS

(представления)

COLUMNS

(столбцы)

DOMAIN_CONSTRAINTS

(ограничения для домена)

TABLE_CONSTRAINTS

(ограничения для таблицы)

REFERENTIAL_CONSTRAINTS

(ссылочные ограничения)

ASSERTIONS

(утверждения)

Следует отметить, что представление TABLES содержит информацию обо всех именованных таблицах, как базовых таблицах, так и представлениях, а представление VIEWS только информацию о представлениях.

    1. Представления

Приведем примеры определения представления на языке SQL.

CREATE VIEW GOOD_SUPPLIER

AS SELECT SN, STATUS, CITY

FROM S

WHERE STATUS > 15.

Соответственно, пример SQL-запроса к этому представлению может выглядеть следующим образом:

SELECT SN, STATUS

FROM GOOD_SUPPLIER

WHERE CITY=’Москва’

Подставив вместо ссылки на имя представления его определение, получим выражение, которое будет подобно приведенному ниже (здесь стоит обратить внимание на вложенный подзапрос в предложении FROM):

SELECT GOOD_SUPPLIER.SN, GOOD_SUPPLIER .STATUS

FROM ( SELECT SN, STATUS, CITY

FROM S

WHERE STATUS > 15) AS GOOD_SUPPLIER

WHERE GOOD_SUPPLIER.CITY = ’Москва’

Это выражение может быть затем упрощено, например, следующим образом:

SELECT SN, STATUS

FROM S

WHERE STATUS > 15 AND CITY = ’Москва’

В последнем случае показан текст запроса, который будет выполняться фактически.

В качестве второго примера приведем операцию удаления.

DELETE

FROM GOOD_SUPPLIER

WHERE CITY=’Москва’

Запрос на удаление, который будет выполняться на самом деле, выглядит следующим образом:

DELETE

FROM S

WHERE STATUS > 15 AND CITY=’Москва’

    1. Транзакции

Для операторов COMMIT и ROLLBACK в языке SQL есть прямые аналоги. Это операторы COMMIT WORK и ROLLBACK WORK соответственно (в обоих случаях слово WORK – необязательное). Но в языке SQL нет явного оператора, соответствующего оператору BEGIN TRANSACTION. Неявно транзакция начинается всякий раз, когда выполняется оператор, способный «инициализировать транзакцию» (transaction-initiating), но только в том случае, когда никакая транзакция не выполняется. Таковыми операторами являются практически все операторы, которые мы обсуждаем в этом разделе.

Замечание. Некоторые реализации языка SQL имеют в своем составе аналоги оператора BEGIN TRANSACTION, которые в явном виде позволяют задавать начало выполнения транзакции. Примером такой реализации может послужить СУБД Microsoft SQL Server 2000.