Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4972
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать

13. Microsoft SQL Server 2000

493

Перед созданием базы данных нужно открыть и установить текущей базу данных master с помощью команды USE master.

Пример 1. Создание базы данных.

CREATE DATABASE owndbase266 ON PRIMARY

(NAME = owndbase266_data,

FILENAME = ' C:\mssqll7\data\4 owndbase266_data.mdf SIZE = 4 MB,

FILEGROWTH = 1 MB)

LOG ON

(NAME = owndbase266_log,

FILENAME = 4 C:\mssqll7\data\4 owndbase266Jog.ldf SIZE = 2 MB,

FILEGROWTH = 1 MB)

Напомним, что при создании БД используется шаблон — база данных model, которая может быть модифицирована как любая другая база данных. Это означает возможность заранее создать требуемые объекты БД, которые будут входить в каждую создаваемую базу данных.

1 3 . 5 . Р а б о т а с т а б л и ц а м и

При работе с таблицами предполагается создание таблиц, добавление данных в таблицу, выборка, удаление и изменение данных в таблице.

Создание таблиц в SQL Server 2000 можно выполнить либо с помощью графического интерфейса Enterprise Manager, либо используя команду CREATE TABLE языка Transact-SQL. Мастера создания таблиц в SQL Server 2000, к сожалению, нет.

Для создания локальной временной таблицы в ее имени первым указывают символ #. По окончании сеанса, в котором временная локальная таблица была создана, она автоматически удаляется. Имя локальной временной таблицы вместе с символом # может иметь не более 116 символов.

Для создания глобальной временной таблицы, доступной в любом сеансе, в ее имени первыми указывают два символа #. Сеансы создаются пользователями, работающими на компьютерах-клиентах. Глобальная временная таблица удаляется автоматически по окончании последнего сеанса, где она использовалась.

Целесообразность создания и использования временных таблиц может быть связана с объединением данных из нескольких таблиц и работой с ними

4 9 4

Часть 3. Современные СУБД и их применение

в течение сеанса. При этом доступ к объединенным данным естественно осуществляется быстрее, чем к данным из нескольких постоянных таблиц.

При создании таблицы для каждого ее поля задается тип данных, определяющий тип информации, которую можно хранить в поле. После определения типа данных столбца он сохраняется как постоянная характеристика. Как и в предыдущей версии, в SQL Server 2000 можно изменять структуру таблицы, например типы данных полей, с помощью оператора ALTER TABLE. Типы данных (системные) таблиц SQL Server 2000 приведены в табл. 13.3.

Таблица 13.3

Типы данных

Тип

Размер, байтов

Краткое описание

b i n a r y ( n)

д о 8 К б а й т

varbinary(n)

д о

8 К б а й т

c h a r ( n )

д о 8 К б а й т

n c h a r ( n )

д о 8 К б а й т

v a r c h a r ( n )

д о 8 К б а й т

nvarchar(n)

д о

4 К б а й т

d a t e t i m e

 

8

s m a l l d a t e t i m e

 

4

d e c i m a l ( p , s )

 

1 - 1 7

n u m e r i c ( p , s )

 

1 - 1 7

float

 

8

real

 

4

bigint

 

8

int

 

4

smallint

 

2

tinyint

 

1

m o n e y

 

8

s m a l l m o n e y

 

4

bit

 

1

t i m e s t a m p

 

8

Д в о и ч н ы е д а н н ы е ф и к с и р о в а н н о й д л и н ы Д в о и ч н ы е д а н н ы е п е р е м е н н о й д л и н ы С и м в о л ь н а я с т р о к а ф и к с и р о в а н н о й д л и н ы

С и м в о л ь н а я с т р о к а U n i c o d e ф и к с и р о в а н н о й длины С и м в о л ь н а я с т р о к а п е р е м е н н о й д л и н ы

С и м в о л ь н а я с т р о к а U n i c o d e п е р е м е н н о й д л и н ы Д а т а и в р е м я высокой т о ч н о с т и Д а т а и в р е м я н и з к о й т о ч н о с т и

Ч и с л о с о б щ и м к о л и ч е с т в о м ц и ф р р и ч и с л о м s ц и ф р п о с л е з а п я т о й

Ч и с л о с о б щ и м к о л и ч е с т в о м ц и ф р р и ч и с л о м s ц и ф р п о с л е з а п я т о й

Ч и с л о с п л а в а ю щ е й т о ч к о й Ч и с л о с п л а в а ю щ е й т о ч к о й

Ц е л о е

ч и с л о

Ц е л о е

ч и с л о

Ц е л о е

ч и с л о

Ц е л о е п о л о ж и т е л ь н о е ч и с л о о т 0 д о 2 5 5 Д е н е ж н о е з н а ч е н и е Д е н е ж н о е з н а ч е н и е

Булево з н а ч е н и е (бит, и м е ю щ и й з н а ч е н и е 0 или 1)

В р е м е н н а я о т м е т к а или уникальный в р а м к а х Б Д н о м е р с т р о к и п о с л е е е о б н о в л е н и я

13. Microsoft

SQL Server 2000

4 9 5

 

 

Таблица 13.3 (продолжение)

Тип

Размер, байтов

Краткое описание

t e xt

д о

2

Гбайт

ntext

д о

1

Гбайт

sql_variant

 

 

 

i m a g e

д о

2

Гбайт

t a b l e

 

 

 

uniqueidentifier

 

 

 

Т е к с т о в ы е

д а н н ы е

Т е к с т о в ы е

д а н н ы е U n i c o d e

Х р а н и т з н а ч е н и я

р а з л и ч н ы х д р у г и х т и п о в , к р о м е text,

ntext, t i m e s t a m p ,

i m a g e и

sql_variant

Д в о и ч н ы е д а н н ы е ( ф а й л ы

M S Office, и з о б р а ж е н и я и

т . д . )

 

 

х р а н е н и е р е з у л ь т а т о в в ы п о л н е н и я з а п р о с о в

Глобальный у н и к а л ь н ы й и д е н т и ф и к а т о р (globally

u n i q u e identifier,

G U I D )

 

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

Для создания постоянной таблицы с помощью SQL Server Enterprise Manager нужно выполнить следующее:

запустить SQL Server Enterprise Manager;

в открывшемся диалоговом окне выбрать серверную группу щелчком по знаку «+» слева от имени группы;

выбрать базу данных (рис. 13.2), в которой предполагается создание таблицы;

ВSfi

7ч Lonsole Root Mumsolt SOI Servers\SQL Server Group\OIUiANf/A-lKBQS2 (Window* M)\D«talMKS

Рис. 13.2. Вид окна с объектами базы данных

496

Часть 3. Современные СУБД и их применение

выбрать объект Tables (таблицы) базы данных и из контекстного меню или из пункта Action (действие) главного меню выбрать команду New

Table (Новая таблица);

в открывшемся диалоговом окне указать имена столбцов таблицы, определив для каждого столбца тип данных, при необходимости размер, допустимость значения Null и значение по умолчанию (Default);

сохранить таблицу (кнопка Save Table), указав ее имя в окне Specify

Table Name.

Создание таблицы можно выполнить с помощью команды CREATE TABLE языка Transact-SQL. Упрощенный формат команды выглядит следующим образом.

CREATE TABLE [имя_БД.[владелец.] | владелец.] имя таблицы ({<определение_столбца> | имястолбца AS вычисляемое_выражение | <ограничения_таблицы>} [,...п])

[ON {группа файлов | DEFAULT}] [TEXTIMAGE ON {группа_файлов | DEFAULT}]

<определение_столбца>::= имя столбца типданных [COLLATE <имя_сопоставления>]

[ [DEFAULT выражение] |

[IDENTITY [(начальное_значение, приращение) [NOT FOR REPLICATION]]]

]

[ROWGUIDCOL] [<ограни чения_столбца> ]

При создании таблицы можно указать базу данных и владельца, которым она принадлежит. Удобно предварительно определить текущую базу данных с помощью команды USE база данных. При этом все последующие команды выполняются для этой базы данных, и ее имя можно не указывать. Имя таблицы и столбца таблицы не может иметь более 128 символов.

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

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

Стандартное значение данных столбца можно указать с помощью параметра

DEFAULT <значение по умолчанию>. Это значение будет автоматически появляться в столбце всякий раз при переходе пользователя к созданию новой строки.

13. Microsoft SQL Server 2000

497

Атрибут IDENTITY позволяет создать числовое поле с автоматическим приращением значений. Начальное значение, заданное для этого атрибута, автоматически помещается в первую строку этого столбца, а при добавлении в таблицу новых строк в этот столбец значения вводятся автоматически путем добавления приращения к значению из последней строки. Это свойство нельзя задавать для столбцов с атрибутом NULL. Если при задании свойства IDENTITY не указать начальное значение и приращение, то по умолчанию они примут значение 1.

NOT FOR REPLICATION означает отмену действия ограничений целостности для поля во время выполнения операций репликации (эта установка включена по умолчанию).

Если при описании столбца указать описатель ROWGUIDCOL, то этот стол-

бец будет играть роль столбца глобального уникального идентификатора стро-

ки (row global unique identifier column). Такие столбцы необходимы для выполнения специальных операций, например, при репликации сведением.

Параметр ON {группа_файлов | DEFAULT} позволяет явно определить группу файлов, в которой необходимо создать таблицу. Эта группа файлов должна существовать в базе данных. Если параметр опущен или задано DEFAULT, то таблица будет создана в группе файлов, определенной как группа файлов по умолчанию.

Параметр TEXTIMAGE_ON {группа_файлов | DEFAULT} используется для указания отдельной группы файлов, используемой для хранения значений типа text, ntext и image. Это делается для повышения производительности обработки таблиц, имеющих указанные типы данных. Если параметр опущен или указано значение DEFAULT, то значения упомянутых типов данных будут размещены в группе файлов по умолчанию.

Параметры, задаваемые в конструкции <ограничения_столбца>, определяют ограничения целостности, действующие на уровне столбца. В составе этих ограничений могут быть следующие: определение первичного ключ (PRIMARY KEY), поддержка уникальности значений поля (UNIQUE), внешний ключ (FOREIGN KEY), возможность хранения неопределенных значений (NULL | NOT NULL), проверка истинности логического выражения для значений поля в операциях вставки и изменения (CHECK) и другие.

Параметры, задаваемые в конструкции <ограничения_таблицы>, определяют ограничения целостности, действующие на уровне таблицы. Эти параметры могут применяться в тех случаях, когда необходимо определить ограничение целостности на основе нескольких столбцов. Для определения параметров здесь во многом используются те же ключевые слова, которые служат для задания ограничений, действующих на уровне столбца.

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

498

Часть 3. Современные СУБД и их применение

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

(имя столбца {ASC | DESC}...),

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

Пример 1. Создание таблицы.

Рассмотрим оператор создания таблицы с тремя столбцами целочисленных типов.

CREATE TABLE table 1

(intl TINYINT, int2 INT, int3 SMALLINT)

Пример 2. Пусть требуется создать таблицу сотрудников, содержащую семь столбцов, используемых для хранения соответственно: цифрового кода сотрудника, фамилии, имени, отчества, пола (М — мужчина, Ж — женщина), даты рождения и должности. При этом код сотрудника должен играть роль первичного ключа таблицы, имя и фамилия не должны быть пустыми и данные таблицы должны сортироваться в алфавитном порядке фамилий и отчеств, а также в порядке увеличения возраста.

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

CREATE TABLE tab2

( e m p i d int IDENTITY (1,1) PRIMARY KEY, secondname varchar(30) NOT NULL,

first_name varchar(15) NOT NULL, middlename varchar(20) NULL, sex char(l),

birthdate datetime, position varchar (50)

CONSTRAINT const_tab2 UNIQUE

(second_name ASC,first_name ASC, birth date DESC)

)

Свойство IDENTITY позволяет определить для столбца таблицы начальное значение, которое автоматически помещается в столбец в первую строку, и приращение, автоматически добавляемое к последнему значению введенному в столбец текущей строки. При добавлении в таблицу новых строк в

13. Microsoft SQL Server 2000

499

этот столбец значения вводятся автоматически путем добавления

прираще-

ния к значению из последней строки.

 

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

Добавление данных в таблицу можно выполнить с помощью оператора INSERT следующего формата

INSERT INTO имя_таблицы (столбец_1,...,столбец_п) VALUES ('строка Г,...,'строка_п')

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

Каждый оператор INSERT позволяет добавить в таблицу одну запись (стро-

ку).

Пример 3. Добавление записи в таблицу.

Рассмотрим для трех столбцов добавление в таблицу строки из трех целочисленных значений.

INSERT INTO table 1 (intl, int2, int3)

VALUES (255, 32767, 50000)

Пример 4. Добавление записи в таблицу.

INSERT INTO table2 (Name, Sity, Year)

VALUES ('Salivan', 'New York', 2004)

Атрибуты NULL И NOT NULL. Задание для столбца таблицы атрибута NULL позволяет опустить при вводе данных значения этого столбца. В случае задания атрибута NOT NULL SQL Server 2000 не позволяет оставить этот столбец пустым при вставке строки в таблицу. По умолчанию столбцу назначается атрибут NOT NULL.

Определенное для столбца значение NULL отличается от пробела, нуля и ASCII-символа нуля. Значение NULL для столбца интерпретируется как неопределенное или не заданное, поскольку при вставке строки в таблицу соответствующее значение не вводилось. При ссылке на строку в месте значения

500

Часть 3. Современные СУБД и их применение

столбца, содержащего NULL, отображается элемент NULL, указывающий на то, что в этом месте строки значение не вводилось.

Если при добавлении записи в таблицу пропустить одно или несколько имен столбцов, то в них помещается стандартное значение или NULL. Правила неявного присвоения значения столбцу, если в операторе INSERT значение столбца не указано, приведены в табл. 13.4.

 

 

 

Таблица 13.4.

Правила неявного присвоения значения столбцу

Определение

Нет ввода значений

Ввод значения

Атрибута DEFAULT

Атрибут DEFAULT

столбца

NULL

 

нет

есть

 

Атрибут NULL

NULL

Стандартное значение

NULL

 

Атрибут NOT NULL

Ошибка

Стандартное значение

Ошибка

Для вставки значения NULL в столбец, для которого задан атрибут NULL, следует в списке за ключевым словом VALUES для этого столбца указать NULL.

Для выборки данных из таблиц используется оператор SELECT языка SQL. С его помощью можно создавать разнообразные запросы на отбор информации из таблиц, позволяя указывать столбцы и строки. Для подготовки SQLзапроса па выборку данных из таблицы можно использовать следующие средства:

утилиту Query Analyzer;

утилиту командной строки ISQL;

утилиту командной строки OSQL.

Отличие OSQL от ISQL заключается в том, что в OSQL для подключения к базе данных используется механизм ODBC, а не механизм DB-LIB. Обе утилиты обладают одинаковым синтаксисом, но вызываются со своими именами.

Наиболее удобно использование программы Query Analyzer, обладающей графическим интерфейсом пользователя (GUI — Graphic User Interface) и обеспечивающей удобную корректировку запросов. Кроме того, этой программой можно пользоваться непосредственно из программы SQL Server Enterprise Manager, которая облегчает работу с табличными структурами, другими серверами и другими возможностями SQL Server 2000.

Для запуска и использования утилиты Query Analyzer из программы SQL Server Enterprise Manager выполняются следующие действия.

1. Выбор в окне программы SQL Server Enterprise Manager сервера баз данных из списка зарегистрированных серверов.

13. Microsoft SQL Server 2000

501

2.Открытие окна Анализатора запросов с помощью команды Tools | SQL

Query Analyzer (Сервис | Анализатор SQL запросов).

3.Выбор в диалоговом окне из списка DB базы данных, если она не выбрана ранее.

4.Ввод оператора запроса в верхней половине окна программы и нажатие клавиши <F5> или выбор команды Query | Execute (Запрос | Выполнить). Для отображения результатов запроса с линиями сетки необходимо после ввода оператора выбрать команду Query | Results In Grid и нажать клавишу <F5>.

Результаты запроса автоматически отображаются в нижней части окна программы Query Analyzer по мере получения информации.

13.6. Индексы и ключи

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

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

При создании индекса SQL Server 2000 выполняет сканирование таблицы, выбирает значения в индексируемом столбце и записывает на индексную страницу указатели на страницы данных и идентификаторы строк для индексируемых значений.

В SQL Server 2000 допускаются следующие два типа индексов: кластерные и некласгериыс.

Для индексов кластерного типа порядок следования строк в индексе совпадает с физическим порядком расположения данных. Кластерный индекс непосредственно содержит данные, поэтому в таблице может быть один индекс кластерного типа. Такой индекс обеспечивает наибольшую скорость доступа к данным, Для задания кластерного индекса обычно выбирают столбец, который наиболее часто используется в операциях поиска, упорядочения или группирования. Например, для этого часто используется столбец, по которому построен первичный ключ.

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

Индекс создают путем указания имен столбцов, составляющих этот

502

Часть 3. Современные

СУБД и их

применение

индекс. Причем при выборке данных из таблиц используется следующий принцип: заданный для таблицы индекс используется, если один из столбцов, указанных в операторе SELECT, следует первым в индексе.

При выборе столбца для создания индекса нужно учитывать следующее:

нельзя создавать индекс для столбцов, имеющих тип данных BIT, TEXT

или IMAGE;

нельзя создавать индекс для столбцов, имеющих тип данных CHAR, VARCHAR, NCHAR, NVARCHAR, BINARY и VARBINARY;

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

для таблиц, к которым строятся запросы, возвращающие большие результирующие множества, целесообразно индексировать все, что возможно;

целесообразно использовать в индексе столбцы, содержащиеся в директивах ORDER BY (упорядочение по) и GROUP BY (сортировка по).

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

Индексы можно создать двумя способами: с помощью программы SQL Server Enterprise Manager и с помощью оператора CREATE INDEX языка Transact SQL. Создать индекс для таблицы может только ее владелец.

Для создания индекса с помощью программы SQL Server Enterprise Manager выполняется следующее:

1.Запуск названной программы из группы Microsoft SQL Server.

2.Выбор сервера, базы данных и таблицы, для которой выполняется создание индекса.

3.Выполнение команды меню Action | All tasks | Manage Indexes (Дей-

ствие | Все задачи | Работа с индексами).

4.В открывшемся диалоговом окне Manage Indexes (Работа с индекса-

ми) нажатие кнопки New (Создать).

5.В очередном диалоговом окне Create New Index (Создание нового ин-

декса) в поле Index Name (Имя индекса) задание имени индекса.

6.В группе Index Options (Параметры индекса) задание параметров индекса с помощью флажков и нажатие ОК.

Выбор кластерного индекса определяется в диалоговом окне Create New Index (Создание нового индекса) в группе Index Options (Параметры индекса) установкой одноименного флажка Clustered Index (Кластерный индекс).