Программирование в Microsoft SQL Server 2000

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

Разбить на страницы
Показывать лекцию целиком

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

  • создавать объекты базы данных, используя оператор 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.

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

    Создайте таблицу с ограничением первичного ключа

  • Убедитесь, что в панели инструментов анализатора запросов Query Analyzer выбрана база данных Aromatherapy.
  • В панели редактирования Editor Pane, окна Query (Запрос), введите следующий оператор:
    CREATE TABLE SimpleTable
    (
    		 SimpleID smallint
    			    IDENTITY (1,1)
    			    PRIMARY KEY CLUSTERED,
    		 SimpleDescription varchar(50)
    )
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст таблицу SimpleTable.
  • В панели Object Browser раскройте папку User Tables для базы данных Aromatherapy. (Если папка уже раскрыта, щелкните на ней, чтобы выбрать панель Object Browser.)
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. В списке появится SimpleTable.
  • Совет. Если окно Query (Запрос) отобразит сообщение о том, что объект с именем "SimpleTable" уже существует, то вам не следует щелкать на Object Browser перед нажатием клавиши F5.

    Создайте таблицу с ограничением внешнего ключа.

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE TABLE RelatedTable
    (
    		 RelatedID smallint
    			    IDENTITY (1,1)
    			    PRIMARY KEY CLUSTERED,
    		 SimpleID smallint
    			    REFERENCES SimpleTable (SimpleID),
    		 RelatedDescription varchar(20)
    )
  • Чтобы выполнить оператор, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст таблицу.
  • Чтобы выбрать Object Browser, щелкните на любом месте в его панели.
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке User Tables новую таблицу RelatedTable.
  • Создайте представление

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE VIEW SimpleView
    AS 
     
    SELECT RelatedID, SimpleDescription, RelatedDescription
    FROM RelatedTable
    INNER JOIN SimpleTable
    ON RelatedTable.SimpleID = SimpleTable.SimpleID
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст представление.
  • В Object Browser раскройте папку View для базы данных Aromatherapy. (Если папка View уже раскрыта, щелкните на любом месте в панели Object Browser для ее выбора.)
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке View новое представление SimpleView.
  • Создайте индекс

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE INDEX SimpleIndex ON SimpleTable (SimpleDescription)
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст индекс.
  • В таблице SimpleTable раскройте папку Indexes и убедитесь, что индекс SimpleIndex добавлен.
  • Изменение объектов

    В то время как оператор CREATE создает новый объект, оператор ALTER предоставляет механизм для изменения определения объекта. Не все объекты, созданные с помощью оператора CREATE, имеют соответствующий оператор ALTER. В таблице 22.2 приведен синтаксис для объектов, которые могут быть изменены.

    Операторы ALTER
    Синтаксис оператора ALTER Действие
    ALTER DATABASE <имя> <спецификация_файла> Изменяет файлы, используемые для хранения базы данных
    ALTER FUNCTION <имя>
    RETURNS <возвращаемое_значение>
    AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие функцию
    ALTER PROCEDURE <имя>
    AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие в себе хранимую процедуру (См. урок 28, "Хранимые процедуры")
    ALTER TABLE <имя>
    <определение_изменения>
    Изменяет определение таблицы (В этом уроке мы подробно рассмотрим <определение_изменения>.)
    ALTER TRIGGER <имя>
    {FOR | AFTER | INSTEAD OF} <действие_dml>
    Изменяет операторы Transact-SQL, содержащие в себе триггер (См. урок 29, "Триггеры")
    ALTER VIEW <имя>
    AS <оператор_выборки>
    Изменяет операторы SELECT, которые создают представление

    Оператор ALTER TABLE является составным по той же причине, почему и оператор CREATE TABLE: определение таблицы состоит из нескольких различных частей. Упрощенная версия синтаксиса для оператора ALTER TABLE приведена ниже:

    ALTER TABLE <имя>
    {
    [ALTER COLUMN <определение_столбца>] |
    [ADD <определение_столбца>] |
    [DROP COLUMN <имя_столбца>] |
    [ADD [WITH NOCHECK] CONSTRAINT <ограничение_для_таблицы>]
    }

    Ключевые слова CHECK (подразумевается) и NOCHECK перед ограничением таблицы, предписывают SQL Server тестировать или не тестировать имеющиеся в таблице данные с учетом нового ограничения. WITH NOCHECK используется лишь в крайне редких случаях.

    Изменение столбцов

    Ниже представлено несколько ограничений для фразы ALTER COLUMN. Столбец не может быть изменен, если он:

  • имеет тип данных text, image, ntext или timestamp;
  • определен в таблице как ROWGIDCOL;
  • является вычисляемым столбцом или используется в вычисляемом столбце;
  • является реплицированным;
  • используется в индексе – если только столбец не имеет тип данных varchar, nvarchar или varbinary; тип данных не изменяется и размер столбца не уменьшается;
  • используется в статистике, генерируемой оператором CREATE STATISTIC;
  • используется в ограничении PRIMARY KEY;
  • используется в ограничении FOREIGN KEY REFERENCES;
  • используется в ограничении CHECK;
  • используется в ограничении UNIQUE;
  • указывается как DEFAULT.
  • Измените представления

  • В Object Browser раскройте папку Columns запроса SimpleView.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER VIEW SimpleView
    AS
    SELECT SimpleDescription, RelatedDescription
    FROM RelatedTable
    INNER JOIN SimpleTable
    ON RelatedTable.SimpleID = SimpleTable.SimpleID
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит только столбцы SimpleDescription и RelatedDescription.
  • Добавьте столбцы в таблицу

  • В Object Browser раскройте папку Columns таблицы SimpleTable.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    ADD NewColumn varchar(20)
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
  • Измените столбцы в таблице

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    ADD COLUMN NewColumn varchar(10)
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
  • Удалите столбцы из таблицы

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    DROP COLUMN NewColumn
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит столбец из таблицы.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser больше не будет отображать столбец NewColumn.
  • Удаление объектов

    Оператор DROP удаляет объект базы данных. В отличие от операторов CREATE и ALTER, операторы DROP имеют простой и неизменный синтаксис:

    DROP <тип_объекта> <имя>

    <тип_объекта> - любой объект из таблицы 22.1, исключая схему.

    Удалите индекс

  • В Object Browser раскройте папку Indexes таблицы SimpleTable.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP INDEX SimpleTable.SimpleIndex
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит индекс.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит пустую папку индексов.
  • Удалите таблицу

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP TABLE RelatedTable
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит таблицу.
  • В панели Object Browser раскройте папку User Tables базы данных Aromatherapy и нажмите клавишу F5 для обновления содержимого экрана. Таблицы RelatedTable в списке уже не будет.
  • Использование Object Browser для определения данных

    DDL-операторы являются не слишком сложными, хотя и составными, однако анализатор запросов Query Analyzer посредством Object Browser предоставляет два метода, с помощью которых DDL будет еще проще использовать. В прошлом уроке мы говорили, что контекстное меню большинства объектов поддерживает команды скриптования, и вы можете использовать их для операторов CREATE, ALTER и DROP применительно к этим объектам.

    Query Analyzer также предоставляет шаблоны, которые являются образцами файлов SQL-сценариев с замещаемыми параметрами. Вы можете создать и свои собственные шаблоны, однако SQL Server 2000 предоставляет базовые шаблоны для большинства операторов CREATE.

    Скриптование DDL

    Создать два сценария для операторов SELECT можно в панели Object Browser. Object Browser поддерживает сценарии CREATE, ALTER и DROP для большинства объектов базы данных. После генерации сценария вы можете видоизменить его для решения своих задач.

    Совет. Операторы CREATE, созданные скриптованием, могут быть сохранены в файле сценария. Это удобно для документирования структуры базы данных.

    Сформируйте сценарий CREATE TABLE

  • В Object Browser щелкните правой кнопкой мыши на таблице Cautions, перейдите к Script Object To New Window AS и выберите
  • Примечание. Поскольку база данных не может содержать несколько таблиц с одинаковыми именами, вы должны отредактировать оператор, если вы хотите выполнить его сейчас. Если вы не хотите создавать новую таблицу, просто закройте окно запроса и перейдите к следующему разделу.

  • Измените имя таблицы в операторе на DuplicateCautions, а имя в ограничении
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст новую таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит в списке новую таблицу DuplicateCautions.
  • Закройте окно запроса, содержащее оператор CREATE.
  • Использование шаблонов

    Язык SQL несколько отличается от большинства других языков программирования, таких как C++ или Microsoft Visual Basic, тем, что в нем есть относительно немного операторов, но синтаксис их может быть довольно сложным. Одна из претензий, часто предъявляемых к языку SQL, состоит в том, что все данные извлекаются с помощью одного оператора: оператора SELECT.

    Шаблоны являются превосходным средством для работы с составными операторами SQL. При работе с SQL длительное время, вы начинаете замечать, что часто используете лишь несколько более или менее стандартных комбинаций основных команд: например оператор SELECT для двух таблиц, имеющих внутреннюю связь INNER JOIN, или оператор CREATE TABLE с идентификационным столбцом IDENTITY. Сохранив, эти операторы как шаблон, вы одной командой сможете воспроизвести весь содержащийся в шаблоне текст. Для настройки операторов вы можете воспользоваться удобным диалоговым окном.

    Совет. Шаблоны могут применяться не только к одной команде. Они могут состоять из любого числа операторов, подобно файлам SQL-сценариев, и могут содержать множество команд и пакетов.

    Несмотря на широту предоставляемых возможностей, шаблоны просты в использовании и создании. Они являются обычными файлами SQL-сценариев с расширением .tql (по умолчанию). Элементы шаблона могут настраиваться. Например, в операторе CREATE TABLE имена столбцов и таблиц могут быть определены как параметры. В шаблоне параметр имеет такую форму: <имя_параметра, тип_данных, значение>. Например, представленный ниже шаблон сценария, содержит два параметра: table_name и sort_column:

    SELECT *
    FROM <table_name, sysname, test_view>
    ORDER BY <sort_column, sysname, test_column>

    Сценарий определяет оба параметра как имеющие тип данных sysname, который является специальным типом, используемым для указания имен объектов. Параметр table_name имеет значение по умолчанию "test_view", а параметр sort_column имеет значение по умолчанию "test_column".

    Анализатор запросов Query Analyzer предоставляет диалоговое окно Replace Template Parameters (Замещение параметров шаблона) для удобного ввода текста в шаблон. Чтобы отобразить это диалоговое окно, откройте шаблон в окне Query (Запрос) и выберите Replace Template Parameters (Замещение параметров шаблона) из меню Edit (Правка).

    Совет. Для открытия диалогового окна Replace Template Parameters (Замещение параметров шаблона) вы также можете воспользоваться комбинацией клавиш Ctrl + Shift + M.

    Сформируйте оператор CREATE TABLE с помощью шаблона

  • В Object Browser выберите вкладку Templates (Шаблоны). Query Analyzer отобразит список категорий для доступных шаблонов.
  • Раскройте папку CREATE TABLE и дважды щелкните на кнопке CREATE TABLE WITH IDENTITY. Query Analyzer откроет новое окно запроса и вставит туда шаблонный текст.
  • В меню Edit (Правка) выберите Replace Template Parameters (Замещение параметров шаблона). Query Analyzer откроет диалоговое окно Replace Template Parameters (Замещение параметров шаблона).
  • Установите следующие значения параметров:
    ПараметрЗначение
    Table_name TemplateTable
    Column_1 TemplateID
    Datatype_for_column_1 Smallint
    Seed 1
    Increment 1
    Column_2 Description
    Datatype_for_column_2 Varchar (20)
  • Нажмите Replace All (Заместить все). Query Analyzer закроет диалоговое окно и подставит значения параметра в параметр в шаблоне.
  • Убедитесь, что база данных Aromatherapy выбрана в панели инструментов анализатора запросов Query Analyzer.
  • Чтобы выполнить оператор, нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст таблицу.
  • В Object Browser выберите вкладку Objects (Объекты), раскройте папку User Tables и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит в списке новую таблицу TemplateTable.
  • Закройте окно Query (Запрос), содержащее оператор CREATE TABLE.
  • Краткое содержание

    Чтобы ...Сделайте следующее
    Создать объект базы данных Используйте оператор CREATE (См. таблицу 22.1)
    Изменить объект базы данных Используйте оператор ALTER (См. таблицу 22.2)
    Удалить объект базы данных Используйте оператор DROP
    Используя Object Browser, создать сценарий DDL В Object Browser щелкните правой кнопкой мыши на объекте, укажите на Script Object (Сценарий для объекта) и выберите CREATE.
    Использовать шаблон В Object Browser щелкните дважды на имени шаблона. В меню Edit (Правка) воспользуйтесь пунком Replace Template Parameters (Замещение параметров шаблона) для замещения параметров шаблона.
    Страницы:

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

  • создавать объекты базы данных, используя оператор 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.

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

    Создайте таблицу с ограничением первичного ключа

  • Убедитесь, что в панели инструментов анализатора запросов Query Analyzer выбрана база данных Aromatherapy.
  • В панели редактирования Editor Pane, окна Query (Запрос), введите следующий оператор:
    CREATE TABLE SimpleTable
    (
    		 SimpleID smallint
    			    IDENTITY (1,1)
    			    PRIMARY KEY CLUSTERED,
    		 SimpleDescription varchar(50)
    )
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст таблицу SimpleTable.
  • В панели Object Browser раскройте папку User Tables для базы данных Aromatherapy. (Если папка уже раскрыта, щелкните на ней, чтобы выбрать панель Object Browser.)
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. В списке появится SimpleTable.
  • Совет. Если окно Query (Запрос) отобразит сообщение о том, что объект с именем "SimpleTable" уже существует, то вам не следует щелкать на Object Browser перед нажатием клавиши F5.

    Создайте таблицу с ограничением внешнего ключа.

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE TABLE RelatedTable
    (
    		 RelatedID smallint
    			    IDENTITY (1,1)
    			    PRIMARY KEY CLUSTERED,
    		 SimpleID smallint
    			    REFERENCES SimpleTable (SimpleID),
    		 RelatedDescription varchar(20)
    )
  • Чтобы выполнить оператор, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст таблицу.
  • Чтобы выбрать Object Browser, щелкните на любом месте в его панели.
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке User Tables новую таблицу RelatedTable.
  • Создайте представление

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE VIEW SimpleView
    AS 
     
    SELECT RelatedID, SimpleDescription, RelatedDescription
    FROM RelatedTable
    INNER JOIN SimpleTable
    ON RelatedTable.SimpleID = SimpleTable.SimpleID
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст представление.
  • В Object Browser раскройте папку View для базы данных Aromatherapy. (Если папка View уже раскрыта, щелкните на любом месте в панели Object Browser для ее выбора.)
  • Нажмите клавишу F5, чтобы обновить содержимое экрана. Object Browser отобразит в папке View новое представление SimpleView.
  • Создайте индекс

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    CREATE INDEX SimpleIndex ON SimpleTable (SimpleDescription)
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст индекс.
  • В таблице SimpleTable раскройте папку Indexes и убедитесь, что индекс SimpleIndex добавлен.
  • Изменение объектов

    В то время как оператор CREATE создает новый объект, оператор ALTER предоставляет механизм для изменения определения объекта. Не все объекты, созданные с помощью оператора CREATE, имеют соответствующий оператор ALTER. В таблице 22.2 приведен синтаксис для объектов, которые могут быть изменены.

    Операторы ALTER
    Синтаксис оператора ALTER Действие
    ALTER DATABASE <имя> <спецификация_файла> Изменяет файлы, используемые для хранения базы данных
    ALTER FUNCTION <имя>
    RETURNS <возвращаемое_значение>
    AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие функцию
    ALTER PROCEDURE <имя>
    AS < операторы_tsql>
    Изменяет операторы Transact-SQL, содержащие в себе хранимую процедуру (См. урок 28, "Хранимые процедуры")
    ALTER TABLE <имя>
    <определение_изменения>
    Изменяет определение таблицы (В этом уроке мы подробно рассмотрим <определение_изменения>.)
    ALTER TRIGGER <имя>
    {FOR | AFTER | INSTEAD OF} <действие_dml>
    Изменяет операторы Transact-SQL, содержащие в себе триггер (См. урок 29, "Триггеры")
    ALTER VIEW <имя>
    AS <оператор_выборки>
    Изменяет операторы SELECT, которые создают представление

    Оператор ALTER TABLE является составным по той же причине, почему и оператор CREATE TABLE: определение таблицы состоит из нескольких различных частей. Упрощенная версия синтаксиса для оператора ALTER TABLE приведена ниже:

    ALTER TABLE <имя>
    {
    [ALTER COLUMN <определение_столбца>] |
    [ADD <определение_столбца>] |
    [DROP COLUMN <имя_столбца>] |
    [ADD [WITH NOCHECK] CONSTRAINT <ограничение_для_таблицы>]
    }

    Ключевые слова CHECK (подразумевается) и NOCHECK перед ограничением таблицы, предписывают SQL Server тестировать или не тестировать имеющиеся в таблице данные с учетом нового ограничения. WITH NOCHECK используется лишь в крайне редких случаях.

    Изменение столбцов

    Ниже представлено несколько ограничений для фразы ALTER COLUMN. Столбец не может быть изменен, если он:

  • имеет тип данных text, image, ntext или timestamp;
  • определен в таблице как ROWGIDCOL;
  • является вычисляемым столбцом или используется в вычисляемом столбце;
  • является реплицированным;
  • используется в индексе – если только столбец не имеет тип данных varchar, nvarchar или varbinary; тип данных не изменяется и размер столбца не уменьшается;
  • используется в статистике, генерируемой оператором CREATE STATISTIC;
  • используется в ограничении PRIMARY KEY;
  • используется в ограничении FOREIGN KEY REFERENCES;
  • используется в ограничении CHECK;
  • используется в ограничении UNIQUE;
  • указывается как DEFAULT.
  • Измените представления

  • В Object Browser раскройте папку Columns запроса SimpleView.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER VIEW SimpleView
    AS
    SELECT SimpleDescription, RelatedDescription
    FROM RelatedTable
    INNER JOIN SimpleTable
    ON RelatedTable.SimpleID = SimpleTable.SimpleID
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит только столбцы SimpleDescription и RelatedDescription.
  • Добавьте столбцы в таблицу

  • В Object Browser раскройте папку Columns таблицы SimpleTable.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    ADD NewColumn varchar(20)
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
  • Измените столбцы в таблице

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    ADD COLUMN NewColumn varchar(10)
  • Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer добавит столбец в таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
  • Удалите столбцы из таблицы

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    ALTER TABLE SimpleTable
    DROP COLUMN NewColumn
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит столбец из таблицы.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser больше не будет отображать столбец NewColumn.
  • Удаление объектов

    Оператор DROP удаляет объект базы данных. В отличие от операторов CREATE и ALTER, операторы DROP имеют простой и неизменный синтаксис:

    DROP <тип_объекта> <имя>

    <тип_объекта> - любой объект из таблицы 22.1, исключая схему.

    Удалите индекс

  • В Object Browser раскройте папку Indexes таблицы SimpleTable.
  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP INDEX SimpleTable.SimpleIndex
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит индекс.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит пустую папку индексов.
  • Удалите таблицу

  • В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно)для очистки содержимого панели редактирования Editor Pane.
  • В панели редактирования введите следующий оператор:
    DROP TABLE RelatedTable
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит таблицу.
  • В панели Object Browser раскройте папку User Tables базы данных Aromatherapy и нажмите клавишу F5 для обновления содержимого экрана. Таблицы RelatedTable в списке уже не будет.
  • Использование Object Browser для определения данных

    DDL-операторы являются не слишком сложными, хотя и составными, однако анализатор запросов Query Analyzer посредством Object Browser предоставляет два метода, с помощью которых DDL будет еще проще использовать. В прошлом уроке мы говорили, что контекстное меню большинства объектов поддерживает команды скриптования, и вы можете использовать их для операторов CREATE, ALTER и DROP применительно к этим объектам.

    Query Analyzer также предоставляет шаблоны, которые являются образцами файлов SQL-сценариев с замещаемыми параметрами. Вы можете создать и свои собственные шаблоны, однако SQL Server 2000 предоставляет базовые шаблоны для большинства операторов CREATE.

    Скриптование DDL

    Создать два сценария для операторов SELECT можно в панели Object Browser. Object Browser поддерживает сценарии CREATE, ALTER и DROP для большинства объектов базы данных. После генерации сценария вы можете видоизменить его для решения своих задач.

    Совет. Операторы CREATE, созданные скриптованием, могут быть сохранены в файле сценария. Это удобно для документирования структуры базы данных.

    Сформируйте сценарий CREATE TABLE

  • В Object Browser щелкните правой кнопкой мыши на таблице Cautions, перейдите к Script Object To New Window AS и выберите
  • Примечание. Поскольку база данных не может содержать несколько таблиц с одинаковыми именами, вы должны отредактировать оператор, если вы хотите выполнить его сейчас. Если вы не хотите создавать новую таблицу, просто закройте окно запроса и перейдите к следующему разделу.

  • Измените имя таблицы в операторе на DuplicateCautions, а имя в ограничении
  • Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer создаст новую таблицу.
  • Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит в списке новую таблицу DuplicateCautions.
  • Закройте окно запроса, содержащее оператор CREATE.
  • Использование шаблонов

    Язык SQL несколько отличается от большинства других языков программирования, таких как C++ или Microsoft Visual Basic, тем, что в нем есть относительно немного операторов, но синтаксис их может быть довольно сложным. Одна из претензий, часто предъявляемых к языку SQL, состоит в том, что все данные извлекаются с помощью одного оператора: оператора SELECT.

    Шаблоны являются превосходным средством для работы с составными операторами SQL. При работе с SQL длительное время, вы начинаете замечать, что часто используете лишь несколько более или менее стандартных комбинаций основных команд: например оператор SELECT для двух таблиц, имеющих внутреннюю связь INNER JOIN, или оператор CREATE TABLE с идентификационным столбцом IDENTITY. Сохранив, эти операторы как шаблон, вы одной командой сможете воспроизвести весь содержащийся в шаблоне текст. Для настройки операторов вы можете воспользоваться удобным диалоговым окном.

    Совет. Шаблоны могут применяться не только к одной команде. Они могут состоять из любого числа операторов, подобно файлам SQL-сценариев, и могут содержать множество команд и пакетов.

    Несмотря на широту предоставляемых возможностей, шаблоны просты в использовании и создании. Они являются обычными файлами SQL-сценариев с расширением .tql (по умолчанию). Элементы шаблона могут настраиваться. Например, в операторе CREATE TABLE имена столбцов и таблиц могут быть определены как параметры. В шаблоне параметр имеет такую форму: <имя_параметра, тип_данных, значение>. Например, представленный ниже шаблон сценария, содержит два параметра: table_name и sort_column:

    SELECT *
    FROM <table_name, sysname, test_view>
    ORDER BY <sort_column, sysname, test_column>

    Сценарий определяет оба параметра как имеющие тип данных sysname, который является специальным типом, используемым для указания имен объектов. Параметр table_name имеет значение по умолчанию "test_view", а параметр sort_column имеет значение по умолчанию "test_column".

    Анализатор запросов Query Analyzer предоставляет диалоговое окно Replace Template Parameters (Замещение параметров шаблона) для удобного ввода текста в шаблон. Чтобы отобразить это диалоговое окно, откройте шаблон в окне Query (Запрос) и выберите Replace Template Parameters (Замещение параметров шаблона) из меню Edit (Правка).

    Совет. Для открытия диалогового окна Replace Template Parameters (Замещение параметров шаблона) вы также можете воспользоваться комбинацией клавиш Ctrl + Shift + M.

    Сформируйте оператор CREATE TABLE с помощью шаблона

  • В Object Browser выберите вкладку Templates (Шаблоны). Query Analyzer отобразит список категорий для доступных шаблонов.
  • Раскройте папку CREATE TABLE и дважды щелкните на кнопке CREATE TABLE WITH IDENTITY. Query Analyzer откроет новое окно запроса и вставит туда шаблонный текст.
  • В меню Edit (Правка) выберите Replace Template Parameters (Замещение параметров шаблона). Query Analyzer откроет диалоговое окно Replace Template Parameters (Замещение параметров шаблона).
  • Установите следующие значения параметров:
    ПараметрЗначение
    Table_name TemplateTable
    Column_1 TemplateID
    Datatype_for_column_1 Smallint
    Seed 1
    Increment 1
    Column_2 Description
    Datatype_for_column_2 Varchar (20)
  • Нажмите Replace All (Заместить все). Query Analyzer закроет диалоговое окно и подставит значения параметра в параметр в шаблоне.
  • Убедитесь, что база данных Aromatherapy выбрана в панели инструментов анализатора запросов Query Analyzer.
  • Чтобы выполнить оператор, нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer создаст таблицу.
  • В Object Browser выберите вкладку Objects (Объекты), раскройте папку User Tables и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит в списке новую таблицу TemplateTable.
  • Закройте окно Query (Запрос), содержащее оператор CREATE TABLE.
  • Краткое содержание

    Чтобы ...Сделайте следующее
    Создать объект базы данных Используйте оператор CREATE (См. таблицу 22.1)
    Изменить объект базы данных Используйте оператор ALTER (См. таблицу 22.2)
    Удалить объект базы данных Используйте оператор DROP
    Используя Object Browser, создать сценарий DDL В Object Browser щелкните правой кнопкой мыши на объекте, укажите на Script Object (Сценарий для объекта) и выберите CREATE.
    Использовать шаблон В Object Browser щелкните дважды на имени шаблона. В меню Edit (Правка) воспользуйтесь пунком Replace Template Parameters (Замещение параметров шаблона) для замещения параметров шаблона.
    Вернуться к учебному плану