Опубликован: 02.02.2007 | Доступ: свободный | Студентов: 2374 / 243 | Оценка: 4.10 / 3.86 | Длительность: 26:44:00
Урок 22:

Язык определения данных

Аннотация: Ранее мы рассмотрели, как создаются объекты базы данных – таблицы, отношения, индексы и представления в схеме вашей базы данных – с помощью средств Microsoft Visual Database Tools из Enterprise Manager. Вы научитесь создавать, изменять и удалять объекты с помощью Transact-SQL.

Вы научитесь:

  • создавать объекты базы данных, используя оператор CREATE;
  • изменять объекты базы данных, используя оператор ALTER;
  • удалять объекты базы данных, используя оператор DROP;
  • создавать DDL сценарии с использованием Object Browser;
  • использовать шаблоны для генерации операторов DDL.

Понятие о DDL

Язык SQL имеет две составляющие: язык обращения с данными Data Manipulation Language (DML) и язык определения данных Data Definition Language (DDL). DML состоит из операторов, используемых для создания и получения данных. DDL состоит из операторов, используемых для создания объектов в базе данных и для установки свойств и значений атрибутов самой базы данных.

DML и DDL

Чем же отличаются эти две группы операторов? В то время, как операторы DML достаточно однотипны для различных реализаций SQL (что дает возможность каждому поставщику программной продукции вводить свои расширения), DDL имеет существенные различия для разных продуктов. Каждый поставщик системы управления базой данных на физическом уровне различным образом реализует реляционную модель и каждый поставщик DDL неизбежно отражает эти различия. Большинство поставщиков предоставляют графические инструменты для определения данных и многие, включая и Microsoft, не ограничивают вас использованием только SQL DDL. Например, Microsoft предоставляет поддержку двух стандартов определения данных: ADO и DAO.

Мы уже успели рассмотреть основные операторы DML: SELECT, INSERT, UPDATE и DELETE. Базовыми же операторами SQL DDL являются CREATE, ALTER и DROP, каждый из которых имеет несколько вариаций для создания объектов различных типов. Несколько из этих операторов мы рассмотрим в этом уроке, а остальные в следующих уроках.

Создание объектов

Объекты базы данных создаются программным путем с помощью оператора CREATE. Точный синтаксис оператора CREATE различен для каждого объекта, однако объекты, которые вы можете создавать, а также базовый синтаксис оператора CREATE для каждого объекта, вы можете найти в таблице 22.1.

Таблица 22.1. Операторы CREATE.
Синтаксис оператора CREATE Создаваемый объект
CREATE DATABASE <имя> Создает базу данных
CREATE DEFAULT <имя> AS < выражение_константы > Создает значение по умолчанию
CREATE FUNCTION <имя> RETURNS <возвращаемое_значение> AS <операторы_tsql> Создает пользовательскую функцию (См. "Пользовательские функции" )
CREATE INDEX <имя> ON <таблица_или_представление> (<индексируемые_столбцы>) Создает индекс в таблице или представление
CREATE PROCEDURE <имя> AS < операторы_tsql> Создает хранимую процедуру (См. "Хранимые процедуры" )
CREATE RULE <имя> AS <условное_выражение> Создает правило базы данных
CREATE SCHEMA AUTHORIZATION <владелец> <определения_объектов> Создает таблицы, представления и разрешения как один объект
CREATE STATISTICS <имя> ON < таблица_или_представление> (<столбцы>) Создает статистические данные, используемые оптимизатором запросов
CREATE TABLE <имя> (<определение_таблицы>) Создает таблицу
CREATE TRIGGER <имя> {FOR | AFTER | INSTEAD OF} < действие_dml> AS <операторы_tsql> Создает триггер (См. "Триггеры" )
CREATE VIEW <имя> AS < оператор_выборки> Создает представление

Из операторов CREATE, рассмотренных в таблице 22.1, только оператор CREATE TABLE является достаточно сложным. Это вызвано тем, что определение таблицы составляет несколько различных элементов. Вы должны определить столбцы, а каждый столбец должен иметь имя и тип данных. Вы можете задать для столбцов возможность использования нулевых (NULL) значений идентификационной строке или в GUID, значение по умолчанию, любые ограничения, применимые к столбцу, а также несколько других свойств, которые мы не будем здесь рассматривать. Упрощенная версия синтаксиса, для определения столбцов имеет следующий вид:

<имя_столбца> <тип_данных>
[NULL | NOT NULL]
[
[DEFAULT <значение_по_умолчанию>] |
[IDENTITY [(начальное_значение>, <шаг_увеличения>)[NOT FOR REPLLCATION]]]]
[ROWGUIDCOL]
[<ограничение_для_столбца>[, <ограничение_для_столбца>...]]

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

Описание для <ограничение_для_столбца> представлено ниже:

[CONSTRAINT <имя_ограничения]
[
[PRIMARY KEY | UNIQUE] [CLUSTERED | NONCLUSTERED] |
[[FOREIGN KEY] REFERENCES <ссылочная_таблица> (имя_столбца)] |
[CHECK [NOT FOR REPLICATION] (<логическое выражение>)]
]

Вы можете задавать более одного выражения <ограничение_для_столбца> для столбца, но при этом вы должны задать тип каждого ограничения ( PRIMARY KEY/UNIQUE, FOREIGN KEY или CHECK ).

Все это выглядят несколько пугающе, но если вы начнете с основных определений (например, MyColumn varchar 20 ) и будете просто добавлять необходимые фразы, то увидите, что все не так уж сложно. Как и в приведенных ниже примерах, вам почти никогда не придется использовать более двух или трех фраз в одном определении столбца:

MyColumn varchar(20)
MyColumn varchar(20) NOT NULL
MyColumn varchar(20)
   PRIMARY KEY CLUSTERED
MyColumn varchar(20)
   IDENTITY (1, 1)
   PRIMARY KEY CLUSTERED
MyColumn varchar(20) NOT NULL FOREIGN KEY REFERENCES Oils (OilName)
Инна Грушецкая
Инна Грушецкая
Сергей Чесноков
Сергей Чесноков