Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Основные составляющие языка SQL.



1.1. Команды определения данных:

– CREATE SCHEME – создать базу данных (определён в стандарте SQL. Для аналогичных целей в некоторых СУБД имеется оператор CREATE DATABASE).

– CREATE TABLE – создание таблицы базы данных. Таблица определяется путем задания содержащихся в ней столбцов. Все значения в столбце имеют один и тот же тип данных. При описа­нии таблиц могут задаваться ограничения целостности данных.

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

– CREATE VIEW – создание виртуальной таблицы (представления, обзора). Представление - это виртуальная таблица, данные для которой получаются из базовых таблиц или других представлений. Представ­ление может быть получено из одной таблицы или нескольких, может включать в себя вычисляемые поля. Представление можно рассматривать как хранимый запрос (оно и выражается с помощью запроса). Представление может использо­ваться в запросах наряду с реальными таблицами. Упрощает со­здание сложных запросов, используется для обеспечения защиты и ускорения работы с БД. В результате, в БД хранится не сама табличная информация, а лишь способ ее оперативного получения. Использование представлений позволяет скрыть от пользователя излишние для него детали организации БД, реализовать дополнительные возможности контроля доступа к данным, минимизировать объем передаваемой и обрабатываемой информации.

– CREATE CURSOR – создание навигационной таблицы (курсора).

К этой группе также относятся операторы изменения и уничтожения описаний, операторы работы с описаниями вспомогательных объектов БД.

1.2. Команды удаления (DROP) и изменения (ALTER) объектов.

Например, таблицы могут быть удалены с помощью оператора DROP TABLE, а структуру существующей таблицы можно изменять с помощью оператора ALTER TABLE.

 

2. Методы и средства контроля целостности в основном реализованы в CREATE TABLE:

Имеющиеся в языке возможности позволяют задать в описаниях данных следующие свойства:

– NOT NULL – обязательность.

– UNIQUE – уникальность.

– DEFAULT – значение по умолчанию.

– CHECK – условие ограничения.

– PRIMARY KEY, FOREIGN KEY – поддержка связей.

– ON UPDATE, ON DELETE – триггеры по умолчанию.

Связь осуществляется за счет указания соответствия первичных и внешних ключей FK=PK, отсутствие связи – указанием FK=NULL, при нарушении ссылочной целостности FK=прочее. Возможные реакции триггера задают, что делать с внешним ключом, если произошло нарушение ссылки:

1) CASCADE – если при выполнении действия (удаления, изменения) – выполняем то же действие и с подчиненной.

2) SET NULL – если при выполнении указанной операции произошел разрыв связи, то мы значение внешнего ключа очищаем.

3) SET DEFAULT – если при выполнении указанной операции произошел разрыв связи, то мы значение внешнего ключа меняем на значение по умолчанию.

4) NO ACTION – ничего не делать, во многих системах заменено на RESTRICT.

 

3. Операторы модификации данных:

– INSERT – добавление данных,

– UPDATE – обновление данных,

– DELETE – удаления данных.

 

4. Выборка:

– SELECT. Оператор состоит из предложений SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, которые должны быть записаны в команде именно в той последовательности, в которой они перечисле­ны в синтаксической формуле.

 

5. Управление доступом:

– GRANT – назначение прав доступа.

Предположим, пользователь является владельцем таб­лицы «Sotrudnik» и хочет позволить пользователю Ivanov выполнять запросы к ней. В этом случае пользователь должен ввести команду

GRANT SELECT ON Sotrudnik TO Ivanov;

– REVOKE – удаление прав доступа.

Команда имеет синтаксис, схожий с синтаксисом оператора GRANT. Например, отмена привилегии на просмотр таблицы «Sotrudnik» для пользователя Ivanov будет выглядеть следующим образом:

REVOKE SELECT ON Sotrudnik TO Ivanov;

 

6. Управление транзакциями:

Транзакция представляет собой законченную совокупность дей­ствий над БД, которая переводит ее из одного целостного в логичес­ком смысле состояния в другое.

– SET TRANSACTION – задает параметры транзакции, объявляет её начало.

– COMMIT – нормальное завершение, завершение транзакции с фиксацией всех результатов.

– ROLLBACK – завершение транзакций с отменой всех выполненных изменений.

Конкретные СУБД используют различные механизмы управления транзакциями. Некоторые СУБД для задания транзакции используют операторы BEGIN TRANSACTION-END TRANSACTION, и все ко­манды, заключенные между ними, составляют транзакцию. В неко­торых системах считается, что, инициируя сеанс работы с SQL, пользо­ватель начинает транзакцию, которая будет продолжаться, пока не будет введен оператор COMMIT WORK, который сделает все изме­нения, проведенные в ходе транзакции, постоянными, или оператор ROLLBACK WORK, который отменяет все сделанные в транзакции изменения. После каждого оператора COMMIT или ROLLBACK на­чинается новая транзакция.

Во многих СУБД присутствует специальный параметр AUTO-COMMIT, который, находясь во включенном состоянии, приводит к автоматической фиксации изменений каждой нормально завершен­ной операции.

Транзакция может быть помечена как «только чтение» (READ ONLY). При выполнении такой транзакции попытка провести изме­нение данных будет вызывать сообщение об ошибке. Задание при­знака READ ONLY позволяет увеличить производительность как этой, так и параллельно исполняемых транзакций.

Транзакции должны соответствовать требованиям ACID (Atomicity, Consistency, Isolation, Durability – Атомарность, Согласованность, Изолированность, Долговечность):

Атомарность: транзакция представляет собой некото­рый набор законченных действий. Система обеспечивает их выполне­ние по принципу «все или ничего» - либо выполняются все действия, тогда транзакция «фиксируется»; либо, если возможность выполнить все действия отсутствует, например в случае сбоев, транзакция «отка­тывается» назад, а БД остается в исходном состоянии.

Согласованность : предполагается, что в результате выполнения транзакции система переходит из одного корректного состояния в другое.

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

Долговечность : если транзакция зафиксирована, то ее результаты должны быть долговечными. Новые состояния всех объек­тов сохранятся даже в случае аппаратных или системных сбоев.

Существуют многочисленные модели транзакций, обеспечиваю­щие соблюдение требований ACID. Некоторые из этих моделей:

- плоские транзакции;

- контрольные точки;

- многозвенные транзакции;

- вложенные транзакции.

 

Использование языка SQL:

В целом, язык SQL не является самодостаточным для создания приложений БД и их полномасштабного обслуживания. Поэтому разработчикам приложений предоставляется различные формы соединения языка SQL с другими (внешними) языками.

В персональных системах язык используется как часть основного языка.

В серверных системах он используется в следующих вариантах:

1) как вспомогательный язык приложения для обращения к СУБД.

2) как средство интерактивных запросов.

3) как средство написания программного кода для серверной части.

Для объединения SQL с базовым языком приложения используются следующие методы:

1. Локальный SQL.

Операторы SQL включаются во внешний язык наравне с прочими операторами и обрабатываются расширенным транслятором внешнего языка как его «родные» операторы. Таким образом, имеет место расширение исходного языка на группу операторов SQL с соответствующим расширением транслятора. Этот вариант характерен для персональных СУБД.

2. Встроенный SQL.

В текст программы на внешнем языке операторы SQL включаются с явным их выделением. Например, встраивание операторов SQL в текст С-программы выполняется в виде:

EXEC SQL

< SQL-оператор>

END SQL

При обработке пакета программы предварительно выполняется программа предтранслятор, которая преобразует SQL-вставки в эквивалентные конструкции внешнего языка, после чего выполняется трансляция с помощью стандартного транслятора внешнего языка. Обмен данными между SQL-вставками и основным кодом программы производится через явно указываемый набор переменных связи.

3. Модульный SQL.

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

4. Динамический SQL – поддерживает ввод, трансляцию и исполнение SQL команд в ходе выполнения программы. Операторы SQL определяются не на момент создания пакета программы, а на момент ее исполнения. Таким образом, трансляция SQL-операторов откладывается на время выполнения программы, что позволяет реализовывать заранее непредвиденные запросы. Для подготовки исполнения используется команда PREPARE, для исполнения EXECUTE.

 


11. Создание БД в SQL

Для первичного создания БД требуемая последовательность операторов SQL обычно оформляется в виде скрипта. Исполнение скрипта приводит к получению пустой БД требуемой структуры.

В стандарте SQL-92 определяются следующие виды объектов, которые могут быть созданы в БД:

· Table - таблица;

· View - представление;

· Schema ~ схема;

· Domain - домен;

· Assertion - утверждение;

· Character set - набор символов;

· Collation - последовательность сортировки;

· Translation - преобразование одного набора символов в другой.

Ниже будут рассмотрены вопросы создания таблиц и доменов. Последовательность шагов создания БД может быть, например, следующей:

 

Оператор создания схемы БД

Данный оператор специфичен для различных СУБД. В некоторых СУБД имеется оператор CREATE DATABASE. В стандарте SQL для аналогичных целей используется оператор CREATE SCHEMA. Упрощенный синтаксис оператора создания БД для СУБД Interbase имеет вид:

 

CREATE {DATABASE | SCHEMA} " < файл> "

USER " < имя> " PASSWORD " < пароль> ";

 

Имя пользователя и пароль должны быть зарегистрированы на используемом сервере.

 

Оператор создания домена

Домен — допустимое потенциальное ограниченное подмножество значений данного типа. Например, домен ИМЕНА определен на базовом типе строк символов, но в число его значений могут входить только те строки, которые могут представлять имена (в частности, для возможности представления русских имен такие строки не могут начинаться с мягкого или твердого знака и не могут быть длиннее, например, 20 символов). В один домен могут входить значения из нескольких колонок, объединённых, помимо одинакового типа данных, ещё и логически. Если два значения берутся из одного и того же домена, то можно выполнить сравнение этих двух значений.

Более простое определение домена — это допустимое потенциальное множество значений одного типа.

Домен представляет собой описание типа столбца, которое может использоваться как шаблон при создании конкретных столбцов таблиц БД. При создании домена можно задать альтернативный тип данных, значение по умолчанию и такие ограничения целостности как NOT NULL и CHECK. Упрощенный синтаксис оператора имеет вид:

 

CREATE DOMAIN < домен> [AS] < тип>

[DEFAULT < значение> ]

[NOT NULL]

[CHECK ( < условие> )];

 

Здесь < домен> - уникальное внутри БД имя, присваиваемое домену,

< тип> - тип данных домена. Упрощенный набор типов данных имеет вид:

INTEGER - целочисленное данное,

FLOAT - численное данное с плавающей точкой,

NUMERIC(n, m) - численное данное с фиксированной точкой

(n - всего знаков, m - знаков после точки),

DATE – данное типа календарная дата,

CHAR(n) – символьная строка (n – длина строки),

NOT NULL – требование обязательности заполнения позиций столбца (в явном виде или значением по умолчанию),

< значение> - значение, автоматически заносимое в позицию столбца при создании новой строки, если эта позиция не заполнена пользователем. Значение по умолчанию чаще всего задается константой соответствующего типа.

< условие> - условное выражение, которое должно проверяться после ввода или изменения значения в столбце. Если условие для нового значения данного выполняется, то новое значение принимается, в противном случае – отвергается.

 

Оператор создания таблицы

База данных обычно содержит несколько таблиц, а также и индексы и некоторые другие информационные объекты.

SQL оперирует с данными, представленными в виде таблиц. Каж­дая таблица содержит множество строк. Различают базовые таблицы – таблицы, определенные с помощью их описания на языке описания данных, и производные таблицы, получаемые из одной (или несколь­ких других) таблицы путем выполнения некоторого запроса. Базовые таблицы бывают постоянные или временные. Если со­здается временная таблица, то используется параметр TEMPORARY. В этом случае при определении таблицы должны быть указаны до­полнительные параметры GLOBAL или LOCAL.

Таблица описывается с помощью оператора CREATE TABLE. Таблица определяется путем задания содержащихся в ней столбцов. Все значения в столбце имеют один и тот же тип данных. При описа­нии таблиц могут задаваться ограничения целостности данных.

Следующий оператор создает новую таблицу в существующей БД. Упрощенный синтаксис оператора имеет вид:

 

CREATE TABLE < таблица>

( < определение столбца>

[, {< определение столбца> | < ограничение таблицы> }, …]);

 

Здесь < таблица> - уникальное внутри БД имя, присваиваемое таблице,

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

< ограничение таблицы> - описание ограничения целостности, предъявляемого к сочетанию значений, введенных в строку таблицы в нескольких столбцах. В описании таблицы может определяться несколько ограничений таблицы.

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

Упрощенный синтаксис определения столбца имеет вид:

 

< определение столбца > = < столбец > {< тип > | < домен > }

[DEFAULT < значение> ]

[NOT NULL]

[ < ограничение столбца>, … ]

 

Здесь < столбец> - уникальное внутри таблицы имя, присваиваемое столбцу,

{< тип> | < домен> } – тип данных столбца или домен, свойства которого наследует столбец,

DEFAULT, NOT NULL – аналогичны объявлениям, рассмотренным для домена,

< ограничение столбца> - требование, которое должно выполняться для вводимых в столбец значений. Набор видов ограничений столбца имеет вид:

UNIQUE – требование уникальности значений в столбце;

PRIMARY KEY – объявление столбца первичным ключом. Это автоматически накладывает требование уникальности на значения в столбце. Кроме того, для столбца должно быть явно указано требование NOT NULL;

Ограничение столбца представляется в виде ограничений ссылочной целостности и ограничений по значению:

REFERENCES < таблица> [(< столбец> )]

[ON DELETE

{NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

[ON UPDATE

{NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

- ограничение ссылочной целостности.

CASCADE - каскадное удаление или изменение внешних ключей с соответствии с удалением или изменением в главной таблице;

SET DEFAULT – установка некорректных значений внешних ключей в заданное для столбца значение по умолчанию;

SET NULL – очистка позиций некорректных значений внешних ключей путем записи в них значения NULL.

CHECK (< предикат> ) – ограничивающее условие, проверяемое при вводе или изменении значения в столбце. Преди­кат использует значения столбцов в выражении для вычис­ления значения

Простыми формами задания условия являются:

< столбец> < оператор сравнения > < значение>,

< столбец > [NOT] BETWEEN < значение> AND < значение>,

< столбец > [NOT] IN (< список значений> ),

< столбец > IS [NOT] NULL.

Предикат может принимать значения TRUE, FALSE или UNKNOWN. Ограничение считается нарушенным, когда преди­кат принимает значение FALSE.

Более сложные условия задаются с использованием кванторов и операторов выборки. Также как для домена простые условия могут соединяться в более сложные с помощью логических функций AND, OR и NOT.

Ограничения таблицы аналогичны ограничениям столбца, но предъявляются не к одному столбцу, а к набору столбцов:

PRIMARY KEY (< список столбцов> ) – объявление набора столбцов первичным ключом;

UNIQUE (< список столбцов> ) – требование уникальности сочетаний значений в наборе столбцов,

FOREIGN KEY (< список столбцов> ) REFERENCES < таблица>

ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]

- объявление набора столбцов внешним ключом;

CHECK ( < предикат> ) – задание ограничивающего условия, включающего значения из нескольких столбцов.

Ниже приведен пример описания трех связанных таблиц: «Spr_mat» — справочник материалов, «Spr_post» — справочник постав­щиков и «Post» - таблица, содержащая информацию о поставках. При включении в базу данных информации о конкретной поставке долж­но проверяться наличие вводимых значений кода материала (kod_mat) и кода поставщика (kod_post) в соответствующих справочниках.

 

CREATE TABLE spr_mat

(kod_mat CHAR(3) NOT NULL PRIMARY KEY,

naim_mat CHAR (30) NOT NULL UNIQUE);

 

CREATE TABLE spr_post

(kod_post CHAR(5) NOT NULL,

naim_post CHAR (30) NOT NULL,

PRIMARY KEY (kod_post),

UNIQUE (naim_post));

 

CREATE TABLE post

(kod_post CHAR(5) NOT NULL,

kod_mat CHAR(3) NOT NULL,

data_post DATE NOT NULL,

kolv NUMERIC NOT NULL,

PRIMARY KEY (kod_post, kod_mat, data_post),

FORIGN KEY (kod_mat) REFERENCES spr_mat (kod_mat),

FORIGN KEY (kod_post) REFERENCES spr_post (kod_post));

 

Структуру существующей таблицы можно изменять с помощью оператора ALTER TABLE.

 

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

[ADD [COLUMN] < определение столбца> ]

| [ALTER [COLUMN] < имя столбца> < изменяющее действие> ]

| [DROP [COLUMN] < имя столбца> RESTRICT | CASCADE]

| [ADD < определение ограничения для таблицы> ]

| [DROP CONSTAINT < имя ограничения> RESTRICT | CASCADE];

 

изменяющее действие:: =

[SET DEFAULT < значение по умолчанию> ] | [DROP DEFAULT]

 

Как видно, с помощью оператора ALTER TABLE можно добавить новый столбец в таблицу, изменить определение существующего стол­бца, добавив/удалив значение по умолчанию, добавить/удалить огра­ничения целостности, а также удалить столбец из таблицы. При уда­лении столбца, если будет использован параметр RESTRICT, то в слу­чае наличия каких-либо ссылок на этот столбец (в представлениях, ограничениях, условиях) оператор будет отвергнут. Если же будет ис­пользован параметр CASCADE, то все объекты, имеющие ссылки на этот столбец, будут уничтожены.

Оператор ALTER TABLE присутствует не во всех СУБД. Часто реализация этого оператора не полностью соответствует стандарту.

Таблицы могут быть удалены с помощью оператора DROP TABLE.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 743; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.083 с.)
Главная | Случайная страница | Обратная связь