Введение
Само развитие языка SQL началось с непрерывного роста быстродействия, а также увеличения объема и структурной сложности хранимых данных, расширение круга пользователей информационных систем. В общей сложности это и привело к широкому распространению наиболее удобных и сравнительно простых для понимания табличных систем управления базами данных. Ведь база данных – это, прежде всего хранилище объектов данных, т.е. набора возможных понятий или событий, описываемых базой данных. Вместе с этим основными функциями базы данных являются систематизация информации (знаний) и возможность взаимосвязи объектов между собой.
В общей сложности структуру данных можно преобразовать в несложную двумерную таблицу. Главная идея реляционного подхода состоит в том, чтобы представить произвольную структуру данных в виде простой двумерной таблицы или, как говорят, нормализовать структуру. Исходя, из этого возникла такая необходимость использования универсального языка для доступа и управления данных в различных базах данных. В итоге этим языком стал SQL .
Для взаимодействия с базами данных язык SQL появился в середине 70-х и был разработан в рамках проекта экспериментальной реляционной СУБД System R. Исходное название языка SEQUEL только чуть-чуть отражает суть этого языка. Язык, конечно, был ориентирован главным образом на удобную и понятную пользователям формулировку запросов к реляционной базы данных, но на самом деле уже являлся полным языком базы данных, содержащим помимо операторов формулирования запросов и манипулирования базы, данных средства определения и манипулирования схемой базы данных. В языке отсутствовали средства синхронизации доступа к объектам базы данных со стороны параллельно выполняемых транзакций: с начала предполагалось, что необходимую синхронизацию неявно выполняет система управления базами данных СУБД [1]
.
В последующем после появления на рынке двух уже пионерских СУБД– SQL/DS 1981 года и DB2 1983 года – SQL приобрел статус стандарта де-факто для профессиональных реляционных СУБД. В 1987 году SQL стал официальным международным стандартом языка баз данных, а в 1992 году вышел SQL второй версии этого стандарта.
Самой главной отличительной чертой SQL является его независимость от компьютерной среды, т.е. операционной системы и архитектуры . SQL –это есть инструмент, предназначенным для обработки и чтения информации, содержащейся в компьютерной базе данных.
При создании языка запросов нового поколения разработчики старались сделать его простым и легким в освоении инструментом для обращения к базе данных. И в итоге SQL стал слабо структурированным языком, особенно по сравнению с такими языками, как С или Pascal , и в то же время достаточно мощным и относительно легким для изучения.
Одним из наиболее важнейших шагов на пути к признанию SQL на рынке стало появление стандартов на этот язык. Обычно употребление стандарта SQL имеют в виду официальный стандарт, утвержденный Американским институтом национальных стандартов ( American National Standards Institute ) и Международной организацией по стандартам ( International Standards Organization ). Но существуют и другие важные стандарты SQL , включая SQL , реализованный в системе DB 2 компании IBM , и стандарт X / OPEN для SQL в среде UNIX . Этот стандарт, слегка пересмотренный в 1989 году, обычно называют стандартом « SQL -89», или « SQLI ».
1
Типы данных языка SQL
В этом разделе мы рассмотрим типы данных SQL, определенные стандартом ISO. И начнем с основных концепций к допустимому идентификатору языка SQL.
1.1 Идентификаторы языка SQL
В языке SQL идентификаторы предназначены для обозначения объектов в базе данных и являются именами таблиц, представлений и столбцов. Символы, которые могут использоваться в создаваемых пользователем идентификаторах языка SQL, должны быть определены как набор символов .
Стандарт ISO задает набор символов, который должен использоваться по умолчанию; он включает строчные и прописные буквы латинского алфавита (A-Z, a-z), цифры ( -9) и символ подчеркивания (_). Допускается использование и альтернативного набора символов.
На формат идентификаторов накладываются следующие ограничения:
- должен начинаться с буквы;
- может иметь длину до 128 символов ;
- не может содержать пробелов.
1.2 Точные числовые
данные
Тип точных числовых данных используется для определения чисел, которые имеют точное представление в компьютере. Следовательно числа состоят из цифр и необязательных символов (десятичной точки, знака "плюс" или "минус"). Данные определяются значностъю (precision) и длиной, дробной части (scale). Значность задает общее количество значащих десятичных цифр числа, в которое входят длина целой и дробной частей, но без учета самой десятичной точки. Дробная часть указывает количество дробных десятичных разрядов числа [2]
. На примере это выглядит так, точное число -21 .751 имеет значность, равную 5 цифрам, и дробную часть длиной 3. Особой разновидностью точных чисел являются целые числа. Существует несколько способов определения данных точного числового типа:
NUMERIC [ precision - [, scale ] ]
DECIMAL [ precision [ ,
scale ] ]
INTEGER
SMALLXNT
Типы NUMERIC и DECIMAL предназначены для хранения чисел в десятичном формате. По умолчанию длина дробной части равна нулю, а принимаемая по умолчанию значность зависит от реализации. Тип INTEGER (обычно до 1 значащих цифр) используется для хранения больших положительных или отрицательных целых чисел. Тип SMALLXNT используется для хранения небольших положительных или отрицательных целых чисел. При использовании этого типа данных расход внешней памяти существенно сокращается.
Тип округленных числовых данных
используется для описания данных, которые нельзя точно представить в компьютере, таких как действительных числа. Для представления округленных чисел или чисел с плавающей точкой используется экспоненциальная система обозначений, в которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок), на пример: 1 ЕЗ, +5.2Е6, - .2Е-4. Существует несколько способов определения данных с типом округленных числовых данных:
FLOAT [precision]
REAL
DOUBLE PRECISION
Параметр precision задает значность мантиссы . Значность определений типа REAL и DOUBLE PRECISION зависит от конкретной реализации.
Тип
DATATIME
(комбинация даты и времени) используется для определения моментов времени с некоторой установленной точностью. Примерами являются даты, отметки времени и время суток. Стандарт ISO разделяет тип данных "дата/время" на подтипы YEAR (Год), MONTH (Месяц), DAY (День), HOUR (Час), MINUTE (Минута), SECOND (Секунда), TIMEZONE_HOUR (Зональный час) и TIMEZONE_MINUTE (Зональная минута). Два последних типа определяют час и минуты сдвига зонального времени по отношению к всеобщему скоординированному времени (прежнее название — гринвичское время). Поддерживаются три типа полей даты / времени .
DATE
TIME [timePrecision] [WITH TIME 2ONS]
TIMESTAMP [timePrecision] [WITH TIME ZONE]
Тип данных DATE используется для хранения календарного времени, включающих поля YEAR , MONTH и DAY . Тип данных TIME используется для хранения отметок времени, включающих поля HOUR, MINUTE и SECOND. Тип данных TIMESTAMP служит для совместного хранения даты и времени. Параметр timePrecision задает количество дробных десятичных знаков, определяющих точность представления значений в поле SECOND. Если этот параметр опущен, по умолчанию его значение для столбцов типа TIME принимается равным нулю (т.е. сохраняется целое количество секунд), тогда как для полей типа TIMESTAMP он принимается равным 6 (т.е. отметки времени сохраняются с точностью до микросекунд). Наличие ключевого слова WITH TIME ZONE определяет использование полей TIMEZONE_HOUR и TIMEZONE_MINUTE. Например, столбец date таблицы Viewing, представляющий дату (день, месяц и год) осмотра клиентом сдаваемого в аренду объекта, может быть определен следующим образом:
viewDate DATE.
Интервальный тип данных
используется для представления периодов времени. Любой интервальный тип данных состоит из набора полей: YEAR, MONTH, HOUR , DAY , MINUTE и SECOND . Существуют два класса данных с интервальным типом: интервалы год-месяц и интервалы время-сутки суток. В первом случае данные включают только два поля — YEAR и/или MONTH. Данные второго типа могут состоять из произвольной последовательности полей DAY, HOUR, MINUTE, SECOND.
Данные интервального типа определяются следующим образом:
INTERVAL -{{startField TQ.endField} singleDatetimeField}
StartField =
YEAR MONTH | DAY j HOUR | MINUTE
[ (intervaiLeadingFieldPrecisicm) ]
endField = YEAR | MONTH | DAY j .HOUR-.. | MINUTE | SECOND
[(fractionalSecondsPrecision)]
singleDatetimeField = startPield |;SECONB
[ (intervejlbeadingFie.IdPrecis.icm [,fractionalSecondsRrecision])]
Для параметра startField должна быть всегда указана размерность первого поля (intervalLeadingFieldPrecision), которая по умолчанию принимается равной двум . Например:
INTERVAL YEAR(2) ТО MONTH
Это объявление описывает интервал времени, значение которого может находиться между годом, месяцем и 99 годом, 11 месяцем. Еще один пример:
INTERVAL HOUR TO SECOND (4)
Это объявление описывает интервал времени, значение которого может изменяться от часов, минут, о секунд до 99 часов, 59 минут 59.9999 секунды. (Число дробных десятичных знаков для секунд установлено равным 4.)
Скалярные операторы
используются для построения скалярных выражений, т.е. выражений, вычисление которых дает скалярный результат. Помимо обычных арифметических операторов (+, -, * и /) в языке определены и другие операторы, представленные в таблице 1(См.Приложение).
1. 3 Скалярные типы данных языка SQL
Скалярные тапы данных языка SQL, которые определены стандартом ISO, предоставлены, в таблице № 2(См. Приложение). В некоторых случаях в целях упрощения манипулирования и преобразования, а также из-за сходства основных свойств данные типов character и bit объединяются названием "строковые типы данных", а данные типов exact numeric и approximate numeric -
названием "числовые типы данных". В стандарте SQL определены также большие символьные и двоичные объекты.
Логические данные
состоят из различимых истинностных значений TRUE (истинный) и FALSE (ложный). Логические данные поддерживают также истинностное значение UNKNOWN (неопределенный), заданное как значение NULL, если применение неопределенных значений-не запрещено ограничением NOT NULL. Все значения данных логического типа и истинностные значения SQL могут совместно применяться в операторах сравнения и присваивания. Значение TRUE в арифметических операторах сравнения больше значения FALSE, а любое сравнение, в котором участвует значение NULL или истинностное значение UNKNOWN, возвращает результат UNKNOWN.
Символьные данные
состоят из последовательностей символов, входящих в определенный создателями СУБД набор символов. Поскольку наборы символов являются специфическими для различных диалектов языка SQL, перечень символов, которые могут входить в состав значений данных символьного типа, также зависит от конкретной реализации. В настоящее время чаще всего используются наборы символов ASCII и EBCDIC. Для определения данных символьного типа применяется следующий формат:
CHARACTER [VARYING] [length]
CHARACTER
CHARACTER VARYING
При определении столбца с символьным типом данных параметр length используется для указания максимального количества символов, которые могут быть помещены в данный столбец.
Символьная строка может быть определена как имеющая фиксированную или переменную длину. Если строка определена с фиксированной длиной, то при вводе в нее меньшего количества символов строковое значение дополняется до указанной длины пробелами, добавляемыми справа. Если строка определена с переменной длиной, то при вводе в нее меньшего количества символов в базе данных будут сохранены только введенные символы, что позволяет достичь определенной экономии внешней памяти.
Битовые данные
используется для определения битовых строк, т.е. последовательности двоичных цифр (битов), каждая из которых может иметь значение либо 0, либо 1. Для определения данных битового типа используется формат, сходный с определением символьных данных:
OBIT IVARYING].
2 Средства поддержки целостности данных
Поддержка целостности данных включает средства задания ограничений, которые вводятся с целью защиты базы от нарушения согласованности сохраняемых в ней данных. Ниже приведенные ограничения могут быть определены в операторах CREATE TABLE и ALTER TABLE [ Документация Microsoft SQL Server 2000] .
2.1 Обязательные
данные
Для некоторых столбцов требуется наличие в каждой строке таблицы конкретного и допустимого значение, отличного от неопределенного значения (или значения NULL). Значение NULL не следует путать с пустыми строковыми значениями или нулевыми числовыми значениями; оно служит для представления данных, которые в данный момент недоступны, отсутствуют или не определены. Для задания ограничений подобного типа стандарт ISO предусматривает использование спецификатора NOT NULL, указываемого в операторах CREATE TABLE и ALTER TABLE. Если для столбца задан спецификатор NOT NULL, система отвергает любые попытки вставить в такой столбец пустое значение. А если при определении характеристик столбца задан спецификатор NULL, то система допускает размещение в этом столбце значений NULL. В соответствии со стандартом ISO по умолчанию применяется спецификатор NULL.
2.2 Ограничения
Каждый столбец имеет собственный домен, т.е. некоторый набор допустимых значений. Стандарт ISO предусматривает два различных механизма определения доменов в операторах CREATE TABLE и ALTER TABLE. Первый состоит в использовании конструкции CHECK, позволяющей задать требуемые ограничения для столбца или таблицы в целом. Конструкция CHECK имеет следующий формат:
CHECK {searchCandition}
При определении ограничений для отдельного столбца в конструкции CHECK можно ссылаться только на определяемый столбец.
Однако стандарт ISO позволяет определять и более сложные домены, для чего предназначен второй механизм — использование оператора CREATE DOMAIN, имеющего следующий формат:
CREATE DOMAIN domainWame [AS] datatype
[DEFAULT defaultOption]
[ CHECK ( searcftCoriditicn )]
Каждому создаваемому домену присваивается имя, задаваемое параметром domainName ,
тип данных, определяемый параметром dataType, необязательное значение по умолчанию, устанавливаемое параметром defaulCOption ,
и необязательный набор допустимых значений, определяемый в конструкции CHECK. Следует отметить, что приведенный формат оператора CREATE DOMAIN является неполным, однако его достаточно для демонстрации основных возможностей.
Удаление доменов из базы данных выполняется с помощью оператора DROP DOMAIN , имеющего следующий формат:
DROP DOMAIN domainName [RESTRICT | CASCADE]
Спецификатор способа удаления домена (RESTRICT или CASCADE) определяет, какие действия выполняются в базе данных, если домен в настоящее время используется. Если задан спецификатор RESTRICT, а домен применяется в существующей таблице, представлении или определении проверки, то операция удаления оканчивается неудачей. А если задан спецификатор CASCADE, то в любой столбец таблицы, который основан на определении домена, автоматически вносятся изменения. Таким образом, чтобы в нем применялся базовый тип данных домена, а любые ограничения или применяемые по умолчанию конструкции операторов для этого домена заменяются в случае необходимости ограничениями столбца или применяемой по умолчанию конструкцией оператора для соответствующего столбца.
3 Определение данных
Язык определения данных SQL DDL (Data Definition Language) позволяет создавать и уничтожать такие объекты базы данных, как схемы, домены, таблицы, представления и индексы. В настоящем разделе кратко рассматриваются способы создания и удаления схем, таблиц и индексов, а в следующем разделе показано, как создавать и удалять представления [3]
. Стандарт ISO предусматривает также возможность создания наборов символов, схем сортировки и преобразования. Но в настоящей книге эти объекты базы данных не рассматриваются. Ниже перечислены основные операторы языка определения данных SQL.
CREATE SCHEMA
CREATE DOMAIN
CREATE TABLE
CREATE VIEW
ALTER DOMAIN
ALTER TABLE
DROP SCHEMA
DROP DOMAIN
DROP TABLE
DROP VIEW
Эти операторы используются для создания, модификации и уничтожения структур, входящих в состав концептуальной схемы. Во многих СУБД предусмотрены также следующие два оператора, хотя они не рассматриваются в стандарте SQL:
CREATE INDEX DROP INDEX
Кроме того, администратор базы данных может воспользоваться дополнительными командами для уточнения параметров физического хранения данных.
3.1 Создание баз данных
В различных СУБД процедура создания баз данных существенно отличается. В многопользовательских системах право создания баз данных обычно закрепляется только за администратором базы данных. В однопользовательских системах предусмотренная по умолчанию база данных может быть создана непосредственно в процессе установки и настройки параметров самой СУБД. А другие базы данных создаются самим пользователем по мере необходимости [4]
. Стандарт ISO не определяет, как должны создаваться базы данных, поэтому в каждом из диалектов языка SQL обычно используется собственный подход. В соответствии со стандартом ISO, таблицы и другие объекты базы данных существуют в некоторой среде (environment). Помимо всего прочего, каждая среда состоит из одного или нескольких каталогов (catalog), а каждый каталог — из набора схем (schema). Схема представляет собой именованную коллекцию объектов базы данных, которые определенным образом связаны друг с другом (все объекты в базе данных должны быть описаны в той или иной схеме). Объектами схемы могут быть таблиц, представления, домены, утверждения, сопоставления, толкования и наборы символов. Все объекты схемы имеют одного и того же владельца и множество общих значений, применяемых по умолчанию.
Этот стандарт оставляет право выбора конкретного механизма создания и уничтожения каталогов за разработчиком СУБД, однако регламентирует механизм создания и удаления схем. Оператор определения схемы имеет следующий формат:
CREATE . SCHEMA [ n а m е | AUTHORIZATION Creator - Identifier ]
В стандарте ISO также указано, что должна существовать возможность определить в рамках данного оператора диапазон средств, доступных пользователям создаваемой схемы. Однако конкретные способы определения подобных привилегий в разных СУБД различаются. Схема удаляется с помощью оператора DROP SCHEMA, который имеет следующий формат:
DROP SCHEMA Name [ RESTRICT | CASCADE]
Если указано ключевое слово RESTRICT, схема должна быть пустой, иначе выполнение операции будет отменено. Если указано ключевое слово CASCADE, при выполнении оператора будут автоматически удалены все связанные с удаляемой схемой объекты, причем в порядке, указанном выше. Если одна из этих операций удаления будет завершена неудачно, выполнение всего оператора DROP SCHEMA будет отменено. Общий эффект от выполнения оператора DROP SCHEMA с параметром CASCADE может затронуть значительную часть базы данных, поэтому подобные операторы должны вводиться с исключительной осторожностью.
В настоящее время операторы CREATE SCHEMA и DROP SCHEMA реализованы в очень немногих СУБД.
3.2 Изменение содержимого базы данных
SQL является полнофункциональным языком манипулирования, данных который использоваться не только для выборки данных из базы, но и для модификации ее содержимого. Операторы модификации информации в базе данных не столь сложны, как оператор SELECT. В этом разделе рассматриваются три оператора языка SQL, предназначенных для модификации содержимого базы данных.
-
INSERT -
оператор предназначен для добавления данных в таблицу,
-
UPDATE -
оператор предназначен для модификации уже помещенных в таблицу данных.
-
DELETE -
оператор позволяет удалять из таблицы строки данных.
3.3 Создание таблиц
После создания общей структуры базы данных можно приступить к созданию таблиц, представляющих отношения, входящие в состав проекта базы данных. Для этой цели используется оператор CREATE TABLE, имеющий следующий общий формат:
CREATE TABLED TableName
{ (columName data Type [NOT NULL] [UNIQUE]
[DEFAULT defaultoption] [CHSCK (searchCondition}:] [, …] }
[PRIMARY KEY (ListOfColumns) ]
{ [UNIQUE {listOfCoIumns) ] [,. . .] }
{ [FOREIGN KEY ( listOfFdreignKeyColumns)
REFERENCES ParentTabl eName [(listOfCandidateKeyColuims) ],
[MATCH {PARTIAL | FULL}
[ON UPDATE. referentialAction]
[ON DELETE referential Action] } [, ,
.-.] }
{[ CHECK ( searchCondtitioa )] [, . , , ] } )
Эта версия оператора CREATE TABLE включает средства определения ограничений ссылочной целостности и других ограничений. Структура самого оператора и степень поддержки тех или иных ограничений в значительной степени зависят от применяемого диалекта языка SQL. Но, как правило, в базе данных следует использовать все поддерживаемые ограничения, поскольку это позволяет повысить качество хранимых данных.
В результате выполнения этого оператора будет создана таблица, имя которой определяется параметром TableName, состоящая из одного или нескольких столбцов типа dataType. Для задания значения, применяемого по умолчанию при вставке данных в конкретный столбец, предусмотрена необязательная конструкция DEFAULT. В базе данных это значение применяется по умолчанию в тех случаях, если в операторе INSERT не задано значение для такого столбца. Кроме прочих значений, опция определения применяемого по умолчанию значения defaultoption может включать литералы. Остальные конструкции известны под названием ограничений таблицы и могут быть дополнительно обозначены с помощью следующей конструкции:
CONSTRAINT ConstraintName
Эта конструкция позволяет в дальнейшем удалить ограничение, указав его имя в операторе ALTER TABLE, как описано ниже. Конструкция PRIMARY KEY определяет один или несколько столбцов, которые образуют первичный ключ таблицы. Если эта конструкция предусмотрена в диалекте SQL, реализованном в конкретной базе данных, то она должна применяться при создании каждой таблицы. По умолчанию для всех столбцов, представляющих первичный ключ, предусмотрено применение ограничения NOT NULL. При создании таблицы разрешено использование только одной конструкции PRIMARY KEY. База данных отвергает все попытки выполнения операций INSERT или UPDATE, которые влекут за собой создание строки с повторяющимся значением в столбце (столбцах) PRIMARY KEY. Таким образом, в базе данных гарантируется уникальность значений первичного ключа. В конструкции FOREIGN KEY определяется внешний ключ (дочерней) таблицы и ее связь с другой (родительской) таблицей. Эта конструкция позволяет реализовать ограничения ссылочной целостности и состоит из следующих частей.
‒
Список UstOfForeignKeyColumns, содержащий имена одного или нескольких столбцов создаваемой таблицы, которые образуют внешний ключ.
‒
Необязательное правило обновления (ON UPDATE) для определения взаимосвязи между таблицами, которое указывает, какое действие (referentialAction) должно выполняться при обновлении в родительской таблице потенциального ключа, соответствующего внешнему ключу дочерней таблицы. В качестве параметра referentiaJAcCion можно указать CASCADE, SET NULL, SET DEFAULT или NO ACTION. Если конструкция ON UPDATE опущена, то по умолчанию подразумевается, что никакие действия не выполняются, в соответствии со значением NO ACTION.
‒
Необязательное правило удаления (ON DELETE) для определения взаимосвязи между таблицами, которое указывает, какое действие (referentialAction) должно выполняться при удалении строки из родительской таблицы, которая содержит потенциальный ключ, соответствующий внешнему ключу дочерней таблицы. Определение параметра referentzalAction совпадает с определением такого же параметра для правила ON UPDATE.
‒
По умолчанию ограничение ссылочной целостности удовлетворяется, если любой компонент внешнего ключа имеет значение NULL или в родительской таблице есть соответствующая строка. Опция MATCH позволяет ввести дополнительные ограничения, касающиеся применения значений NULL во внешнем ключе. Если задана опция MATCH FULL, то либо все компоненты внешнего ключа должны быть пусты (NULL), либо все должны иметь непустые значения. А если задана опция MATCH PARTIAL, то либо все компоненты внешнего ключа должны быть пусты (NULL), либо в родительской таблице должна существовать хотя бы одна строка, способная удовлетворить это ограничение, если все остальные значения NULL были подставлены правильно. Некоторые авторы утверждают, что в ограничениях ссылочной целостности следует применять только опцию MATCH FULL.
В операторе создания таблицы может быть задано любое количество конструкций FOREIGN KEY. Конструкции CHECK и CONSTRAINT позволяют определять дополнительные ограничения. Если конструкция CHECK используется в качестве ограничения столбца, то она может ссылаться только на определяемый столбец. Ограничения фактически контролируются после применения каждого оператора SQL к таблице, на которой они заданы, но такая проверка может быть отложена до окончания той транзакции, в состав которой входит текущий оператор SQL.
3.4 Модификация определения таблицы
В стандарте ISO предусмотрено применение оператора ALTER TABLE для изменения структуры таблицы после ее создания. Определение оператора ALTER TABLE состоит из шести опций, позволяющих выполнить следующие действия:
‒
ввести новый столбец в таблицу;
‒
удалить столбец из таблицы;
‒
ввести новое ограничение таблицы;
‒
удалить ограничение таблицы;
‒
задать для столбца значение ,
применяемое по умолчанию ;
‒
удалить опцию, предусматривающую применение для столбца значения, заданного по умолчанию.
Ниже приведен основной формат этого оператора :
ALTER TABLE TableName
[ADD [COLUMN] columneName [RESTRICT | CASCADE]]
[DROP [COLUMN] columnName [RESTRICT | CASCADE]]
[ADD [CONSTRAINT [ConstreintName]] tableConstraintDefinition]
[DROP CONSTRAINT ConstraintName [RESTRICT | CASCADE]]
[ALTER [COLUMN] SET DEFULT defaultOption]
[ ALTER [ COLUMN ] DROP DEFAULT ]
Почти все параметры данного оператора совпадают с параметрами оператора CREATE TABLE, описанного в предыдущем разделе, В качестве параметра с определением ограничения таблицы CaJbleConstraintDefinition может применяться одна из конструкций PRIMARY KKY , UNIQUE , FOREIGN KEY или CHECK . Конструкция ADD COLUMN аналогична конструкции определения столбца в операторе CREATE TABLE. В конструкции DROP COLUMN задается имя столбца, удаляемого из определения таблицы, и имеется необязательная опция, позволяющая указать, является ли действие операции DROP каскадным или нет, как показано ниже.
RESTRICT ‒
Операция DROP отвергается, если на данный столбец имеется ссылка в другом объекте базы данных (например, в определении представления). Это значение опции предусмотрено по умолчанию.
CASCADE ‒
Выполнение операции DROP продолжается в любом случав и ссылки на столбец автоматически удаляются из любых объектов базы данных, где они имеются. Эта операция выполняется каскадно, поэтому если столбец удаляется из объекта, содержащего ссылку, то в базе данных выполняется проверка того, имеются ли ссылки на этот столбец я каком-либо ином объекте, такие ссылки уничтожаются и в этом объекте, и т.д.
3.5 Удаление таблиц
С течением времени структура базы данных меняется: создаются новые таблицы, а прежние становятся ненужными. Ненужные таблицы удаляются из базы данных с помощью оператора DROP TABLE, имеющего следующий формат:
DROP TABLE.TableWame [RESTRICT I CASCADE]
Например, для удаления таблицы PropertyForRent можно использовать следующий оператор:
DROP TABLE PropertyForRent;
Однако следует отметить, что эта команда удалит не только указанную таблицу, но и все входящие в нее строки данных. Если требуется удалить из таблицы лишь строки данных, сохранив в базе описание самой таблицы, то следует использовать оператор DELETE. Оператор DROP TABLE дополнительно позволяет указывать, следует ли операцию удаления выполнять каскадно.
RESTRICT ‒
Операция DROP отвергается, если в базе данных имеются другие объекты, существование которых зависит от того, существует ли в базе данных удаляемая таблица.
CASCADE ‒
Операция DROP продолжается, и из базы данных автоматически удаляются все зависимые объекты (и объекты, зависящие от этих объектов).
Общий эффект от выполнения оператора DROP TABLE с ключевым словом CASCADE может распространяться на значительную часть базы данных, поэтому подобные операторы следует использовать с максимальной осторожностью. Чаще всего оператор DROP TABLE используется для исправления ошибок, допущенных при создании таблицы. Если таблица была создана с неправильной структурой, можно воспользоваться оператором DROP TABLE для ее удаления, после чего создать таблицу заново.
4 Представления
Представление это динамически сформированный результат одной или нескольких реляционных операций, выполненных над отношениями базы данных с целью получения нового отношения. Представление является виртуальным отношением, которое не всегда реально существует в базе данных, но создается по запросу определенного пользователя в ходе выполнения этого запроса.
С точки зрения пользователя базы данных представление выглядит как реальная таблица данных, содержащая набор поименованных столбцов и строк данных. Но в отличие от реальных таблиц представления не всегда существуют в базе как некоторый набор сохраняемых значений данных. В действительности доступные через представления строки и столбцы данных являются результатом выполнения запроса, заданного при определении представления. СУБД сохраняет определение представления в базе данных. Обнаружив ссылку на представление, СУБД применяет один из, двух следующих подходов для формирования представления. При первом подходе СУБД отыскивает определение представления, и преобразуют исходный запрос, лежащий в основе представления, в эквивалентный запрос к таблицам, использованным в определении представления, после чего модифицированный запрос выполняется. Этот процесс слияния запросов, называемый заменой представления (под этим подразумевается замена представления оператором SQL, который обращается к базовым таблицам). При втором подходе, который называется материализацией представления ,
готовое представление, хранится в базе данных в виде временной таблицы, а его актуальность постоянно поддерживается по мере обновления всех таблиц, лежащих в его основе.
5 Транзакций в SQL
Стандарт ISO включает определение модели транзакций, построенной на использовании двух специальных операторов — COMMIT и ROLLBACK. Большинство коммерческих реализаций языка SQL поддерживает эту модель, которая впервые была реализована в СУБД DB2 компании IBM. Транзакцией называется логическая единица работы, состоящая из одного или нескольких операторов SQL, которая с точки зрения восстановления данных будет рассматриваться, и обрабатываться системой как единое неделимое действие. В стандарте указывается, что в языке SQL транзакция автоматически запускается любым инициализирующим транзакцию оператором SQL, выполняемым пользователем или программой. Изменения, внесенные в базу данных в ходе выполнения транзакции, не будут восприниматься любыми другими выполняющимися параллельно транзакциями до тех пор, пока эта транзакция не будет явным образом завершена. Завершение транзакции может быть выполнено одним из следующих четырех способов.
‒
Ввод оператора COMMIT означает успешное завершение транзакции. После его выполнения, внесенные в базу данных изменения, приобретают постоянный характер. После обработки оператора COMMIT ввод любого инициирующего транзакцию оператора автоматически вызовет запуск новой транзакции.
‒
Ввод оператора ROLLBACK означает отказ от завершения транзакции, в результате чего выполняется откат всех изменений в базе данных, внесенных при выполнении этой транзакции. После обработки оператора ROLLBACK ввод любого инициирующего транзакцию оператора автоматически вызовет запуск новой транзакции.
‒
При внедрении операторов SQL в текст программы успешное окончание ее работы автоматически вызовет завершение последней запущенной программой транзакции, даже если оператор COMMIT для нее не был введен явно.
‒
При внедрении операторов SQL в текст программы аварийное окончание ее работы автоматически вызовет откат последней транзакции, запущенной этой программой.
В языке SQL запрещено использование вложенных транзакций. С помощью оператора SET TRANSACTION пользователи могут настраивать определенные характеристики процесса обработки транзакций. Основной формат этого оператора имеет следующий вид:
SET ' TRANSACTION
[ READ ONLY |
READ WRITS } |
[ISOLATION LEVEL READ UNCOMMITTED READ COMMITTED
REPEATABLE READ | SERIALIZABLE 3]
Квалификаторы READ ONLY и READ WRITE указывают, что в транзакциях допускается выполнение только операций чтения или чтения и записи. По умолчанию предполагается использование квалификатора READ WRITE (если только не выбран уровень изоляции READ UNCOMMITTED). Вероятно, многих смутит тот факт, что в режиме READ ONLY в транзакциях допускается выдача операторов INSERT, UPDATE и DELETE для временных таблиц (но только для временных). Показатель уровня изоляции определяет ту степень взаимодействия с другими транзакциями, которая допускается при выполнении транзакции.
Полная безопасность гарантируется только уровнем изоляции SERIALIZABLE, который предусматривает генерацию временных графиков сериализации. Все остальные уровни изоляции требуют, чтобы СУБД предоставляла некоторый механизм, который программисты могли бы использовать для обеспечения сериализации данных. Там же будут даны дополнительные разъяснения по поводу механизмов выполнения транзакций и сериализации.
6 Управление доступом к данным
Язык SQL включает операторы GRANT и REVOKE, предназначенные для организации защиты таблиц в базе данных [5]
. Применяемый механизм защиты построен на использовании идентификаторов пользователей, предоставляемых им прав владения и привилегий.
6.1 Идентификаторы
пользователей
и права владения
Идентификатором пользователя называется обычный идентификатор языка SQL, используемый для обозначения некоторого пользователя базы данных. Каждому пользователю базы данных должен быть назначен собственный идентификатор, присваиваемый администратором базы данных. По очевидным соображениям защиты данных идентификатор пользователя, как правило, защищается паролем. Каждый выполняемый СУБД оператор SQL выполняется от имени какого-либо пользователя. Идентификатор пользователя применяется для определения того, на какие объекты базы данных может ссылаться пользователь и какие операции с этими объектами он имеет право выполнять. Каждый созданный в среде SQL объект имеет своего владельца. Владелец задается идентификатором пользователя, определенным в конструкции AUTHORIZATION той схемы, которой этот объект принадлежит. Первоначально только владелец объекта знает о существовании данного объекта и имеет право выполнять с этим объектом любые операции.
6.2 Привилегии
Привилегиями называют определения действий, которые пользователь имеет право выполнять в отношении данной таблицы базы данных или представления. В стандарте ISO определяется следующий набор привилегий:
‒
SELECT ‒
право выбирать данные из таблицы;
‒
INSERT ‒
право вставлять в таблицу новые строки;
‒
UPDATE ‒
право изменять данные в таблице;
‒
DELETE ‒
право удалять строки из таблицы;
‒
REFERENCES ‒
право ссылаться на столбцы указанной таблицы в описаниях требований поддержки целостности данных;
‒
USAGE ‒
право использовать домены, проверки, наборы символов и трансляции.
Понятия проверок, наборов символов и трансляций не рассматриваются в этой книге. Привилегии INSERT и UPDATE могут ограничиваться лишь отдельными столбцами таблицы; в этом случае пользователь может модифицировать значения указанных столбцов, но не изменять значения остальных столбцов таблицы. Аналогичным образом, привилегия REFERENCES может распространяться только на отдельные столбцы таблицы, что позволит использовать их имена в формулировках требований защиты целостности данных (например, в конструкциях CHECK и FOREIGN KEY), входящих в определения других таблиц, тогда как применение для подобных целей остальных столбцов будет запрещено.
Заключение
Стандарт ISO предусматривает использование восьми базовых типов данных: логических, символьных и битовых строк, точных и округленных чисел, даты/времени и временного интервала, а также символьных и больших двоичных объектов.
Операторы языка SQL DDL позволяют создавать новые объекты базы данных. Операторы CREATE и DROP SCHEMA позволяют создавать и удалять схемы. Операторы CREATE, ALTER и DROP TABLE обеспечивают создание, модификацию и удаление таблиц базы данных. Операторы CREATE и DROP INDEX позволяют создавать и удалять индексы для указанной таблицы.
Стандарт ISO языка SQL предусматривает использование в операторах CREATE TABLE и ALTER TABLE специальных конструкций, предназначенных для определения требований поддержки целостности данных, к которым относятся условие обязательности. Обязательность наличия данных указывается с помощью ключевого слова NOT NULL. Ограничения для доменов атрибутов задаются либо с помощью конструкций CHECK, либо посредством создания соответствующих доменов с помощью операторов CREATE DOMAIN. Первичные ключи определяются с помощью конструкции PRIMARY KEY, а альтернативные ключи описываются с помощью комбинации ключевых слов NOT NULL и описателей UNIQUE. Внешние ключи описываются с помощью конструкции FOREIGN KEY, а также задания правил удаления и обновления с использованием конструкций ON UPDATE и ON DELETE.
Представления могут использоваться с целью упрощения структуры базы данных с точки зрения пользователя и формулирования запросов к базе данных. Кроме того, представления могут использоваться для защиты определенных столбцов и/или строк таблицы от несанкционированного доступа. Не все виды представлений допускают обновление содержащихся в них данных.
Оператор COMMIT указывает на успешное завершение транзакции и необходимость фиксации в базе данных всех изменений, внесенных при ее выполнении. Оператор ROLLBACK указывает, что выполнение транзакции должно быть прекращено, а все внесенные в ходе ее выполнения изменения должны быть отменены.
Управление доступом в языке SQL к данным построено на базе концепций идентификаторов пользователей, предоставления привилегий и прав владения. Идентификаторы пользователей назначаются всем пользователям базы данных ее администратором и предназначены для идентификации отдельных пользователей. Каждый создаваемый в базе данных объект SQL имеет своего владельца. Владелец объекта может предоставить другим пользователям базы данных те или иные привилегии доступа к данному объекту, для чего используется оператор G^ANT. Предоставленные привилегии могут быть впоследствии отменены с помощью оператора REVOKE. К предоставляемым привилегиям относятся USAGE, SELECT, DELETE, INSERT, UPDATE и REFERENCES, причем три последние могут быть ограничены отдельными столбцами таблицы или представления. Пользователю может быть предоставлено, право передавать полученные им привилегии другим пользователям базы данных по его собственному усмотрению, для чего используется конструкция WITH GRANT OPTION. Этот режим может быть отменен с помощью конструкции GRANT OPTION FOR оператора REVOKE .
И так язык SQL является стандартом для использования в реляционных базах данных, наиболее современных хранилищах информации. Перспективы их развития БД огромны, но прослеживается четкая тенденция во всех новых СУБД - обязательная поддержка языка SQL.
Глоссарии
№
п/п
|
Новое понятие
|
Содержание
|
1
|
Двойное назначение SQL
|
Использование языка SQL как интерактивного и как встроенного
|
2
|
Идентификатором пользователя
|
Обычный идентификатор языка SQL, используемый для обозначения некоторого пользователя базы данных
|
3
|
Представление
|
Динамически сформированный результат одной или нескольких реляционных операций, выполненных над отношениями базы данных с целью получения нового отношения |
4
|
Привилегиями
|
Определения действий, которые пользователь имеет право выполнять в отношении данной таблицы базы данных или представления |
5
|
Транзакцией
|
Логическая единица работы, состоящая из одного или нескольких операторов SQL, которая с точки зрения восстановления данных будет рассматриваться, и обрабатываться системой как единое неделимое действие |
6
|
Распределение транзакции
|
Транзакция, осуществляемая доступ к данным, сохраняемых более чем в одном местоположение
|
7
|
ISO
|
Национальная Организация Стандартов
|
Список использованных источников
1. Глушаков С.В. Базы данных. – М.:АСТ, 2001. 211 с.
2. Дейт К. Дж. Введение в системы баз данных. 6-е изд. - М.: Вильямс. 2000. 316 с.
3. Документация Microsoft SQL Server 2000. 169 с.
4. Конноли Т., Бегг Л., Страчан А. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 2-е изд. М.Вильямс 2000. , 240 с.
5. Кириллов В.В.Основы проектирование реляционных баз данных. СПб. 2000. , 245с.
6. Когаловский М.Р. Энциклопедия технологий баз данных. – М. 2002. 479с.
7. Мамаев Е. Microsoft SQL Server 2 – СПБ.: БХВ-Петербург, 2002. 243 с.
8. Федоров А., Елманова Н.,Базы данных для всех. –
М.: Компьютер -
пресс,2001. 312 с.
9. Фаронов В.В. Основы программирования в SQL. - М.: Издатель Молгачева С.В., 2002. – 329 с.
10. Харрингтон. Проектирование реляционных баз данных просто и доступно. – М.:Лори,2000. –3 39с. Приложение А
Таблица №1 - Типы операторов
Оператор Назначение
|
Оператор Назначение
|
BIT_LENGTH |
Возвращает длину заданной строки в битах. Например, результат вычисления выражения BIT_LENGTH(X'FFFF') равен 16 |
OCTET_LENGTH |
Возвращает длину заданной строки в октетах (длина в битах, деленная на 8}. Например, результат вычисления выражения OCTET_ L ENG TH (X'FFFF') равен 2 |
CHAR__LENGTH |
Возвращает длину заданной строки в символах(или в октетах, если строка является битовой). Например, результат вычисления выражения CHAR _ LENGTH ( ' Beech ') равен 5 |
CAST |
Преобразует значение выражения, построенного из данных одного типа, в значение данных другого типа. В качестве примера можно привести выражение CAST (Б .2Е6 AS INTEGER) |
| | |
Операция конкатенации, Соединенные с помощью этой операции две символьные или битовые строки преобразуются в одну строку. Например, выражение f Name j | IName позволяет объединить в одну символьную строку имя и фамилию работника |
CURRENTJJSER ИЛИ USER |
Функция возвращает символьную строку, представляющую собой текущий идентификатор в системе авторизации (или, как принято говорить, имя учетной записи) текущего пользователя |
SESSION_USER |
Функция возвращает символьную строку, представляющую собой идентификатор текущего сеанса SQL |
SYSTEMJJSER |
Функция возвращает символьную строку, представляющую собой идентификатор пользователя, активизировавшего текущий модуль |
LOWER |
Функция преобразует в заданной строке все прописные буквы в строчные. Например, в результате вычисления выражения
LOWER ( SELECT fName FROM Staff WHERE staffNo = ' SL 21') будет получено значение ' john '
|
UPPER |
Функций преобразует в заданной строке все строчные буквы в прописные. Например, в результате вычисления выражения UPPER ( SELECT fName FROM Staff WHERE staffNo = SL 21') будет получено значение ' JOHN ' |
TRIM |
Функция удаляет указанные ведущие (LEADING), конечные (TRAILING) или те и другие (BOTH) символы из заданной строки. Например, вычисление выражения TRIM (BOTH ' * ' FROM ' *** Hello World * * * ' ) даст результат ' Hello World 1 |
POSITION |
Функция возвращает позицию одной строки в другой строке. Например, в результате вычисления выражения POSITION (' ее' IN 'Beech') будет получено значение 2 |
SUBSTRING |
Функция выполняет выделение подстроки из заданной строки. Например, в результате вычисления выражения SUBSTRING!'Beech' FROM 1 то з) будет получено значение 'Bee1 |
EXTRACT |
Функция возвращает значение указанного поля из значения типа даты, времени или интервала. В качестве примера можно указать Выражение EXTRACT ( YEAR FROM Registration . dateJoined ) |
CASE |
Оператор возвращает одно из значений заданного набора исходя из результатов проверки выполнения указанных условий. Например
CASE type
WHEN 'House' THEN 1
WHEN 'Flat' THEN 2
ELSE
END
|
CURRENT_DATE |
Функция возвращает текущую дату того часового пояса, в котором
находится пользователь
|
CURRENTJTIME |
Функция возвращает текущее время того часового пояса, который в настоящее время применяется по умолчанию для текущего сеанса, Например, выражение CTJRRENTJTIME (6) возвращает текущее время с точностью до микросекунд |
CURRENT_TIME_STAMP |
функция возвращает текущую дату и время того часового пояса,
который в настоящее время применяется по умолчанию для
текущего сеанса. Например, выражение CURRENT_TIMESTAMP(O)
возвратит временную отметку с точностью до целых секунд
|
Приложение Б
Таблица № 2 - Скалярные типы данных языка SQL
Типы данных
|
Объявления
|
boolean
(Логический)
|
BOOLEAN |
character
(Символьный)
|
CHAR VARCHAR |
bit
(Битовый)
|
BIT
BIT V ARYING
|
exact numeric
( Точные числа )
|
NUMERIC
DECIMAL
INTEGER
SMALLINT
|
approximate numeric
( Округленные числа )
|
FLOAT
REAL
DOUBLE
PRECISION
|
datetime
( Дата / время )
|
DATE
TIME
TIMESTAMP
|
interval
( Интервал )
|
INTERVAL |
[1] Дейт К.Дж. Введение в системы баз данных. 6-е изд. - М.: Вильямс. 2000 . с.16.
[2] Глушаков С.В. Базы данных. – М.:АСТ, 2001. 11 с.
[3] Конноли Т., Бегг Л., Страчан А. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 2-е изд. М.Вильямс 2000. , 20 с.
[4] Федоров А.,Елманова Н.Базы данных для всех. –
М.: Компьютер -
пресс,2001. 12 с.
[5] Мамаев Е. Microsoft SQL Server 2 – СПБ.: БХВ-Петербург, 2002. 43 с.
|