Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БазыДанных(заочка) / БД лабпрактикум ч2.doc
Скачиваний:
55
Добавлен:
17.04.2015
Размер:
218.11 Кб
Скачать

Создание индекса инструкцией Create Table

При создании таблицы инструкцией Create Table можно создать индекс по отдельным столбцам или составной индекс по двум или больше столбцам. Для этого используется ключевое слово – Constraint (с него начинается определение индекса).

В следующем примере показано, как создать таблицу с индексом по трем столбцам.

Create Table Служащие ([Имя служащего] Text (25),[Фамилия служащего] Text (25), [Дата рождения] DateTime, Constraint СлужащиеИндекс Unique ([Имя служащего],[Фамилия 30а30еляя30го],[Дата рождения] )).

Чтобы проиндексировать только один столбец, ключевое слово Constraint нужно поместить в определение этого столбца. Например, для создания индекса только по столбцу Дата рождения можно выполнить следующую инструкцию:

Create Table Служащие ([Имя служащего] Text (25), [Фамилия служащего] Text (25), [Дата рождения] DateTime Constraint СлужащиеИндекс Primary).

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

Создание индекса инструкцией Create Index

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

Create Unique Index Index1 On Служащие ([Дата рождения])

Создание индекса инструкцией Alter Table

Добавить индекс к существующей таблице можно, используя инструкцию Alter Table с предложением Add Constraint.

Например, следующая инструкция добавляет индекс типа первичный ключ по столбцу Ном_служащего таблицы Служащие:

Alter Table Служащие Add Constraint Index1 Primary (Ном_Служащего)

Инструкцией Alter Table в таблице можно создать и составной индекс:

Alter Table Служащие Add Constraint ИмяИндекса Unique ([Имя служащего], [Фамилия служащего], [Дата рождения])

Для удаления индекса используется ключевое слово Drop с добавлением опции Constraint в инструкции Alter Table.

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

Alter Table Служащие Drop Constraint Index1.

Это же можно выполнить инструкцией

Drop Index Index1 On Служащие.

Инструкции манипулирования данными (dml)

В инструкции манипулирования данными входят три операции: операция удале­ния записей — ей соответствует инструкция DELETE, операция добавления или вво­да новых записей — ей соответствует инструкция INSERT и операция изменения (обновления записей) — ей соответствует инструкция UPDATE.

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

Инструкция ввода данных INSERT имеет следующий синтаксис:

INSERT INTO имя_таблицы [(<список столбцов>)]

VALUES (<список значений>)

Подобный синтаксис позволяет ввести только одну строку в таблицу.

Insert Into Студент ([Фамилия],[Имя],[Дата рождения])

Values (“Петров”,”Иван”, 23/3/80)

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

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

Insert Into таблица_куда [In внешняя_база_данных]

Select [Источник] поле1, поле2,…

From выражение

Where условие

Перед загрузкой выполняется подзапрос Select, который и формирует выборку для добавления. Фраза Select определяет структуру данных источника передаваемых записей – имена таблицы и полей, содержащих исходные данные для загрузки в таблицу_куда. From позволяет указать имена исходных таблиц, участвующих в формировании выборки, а фраза Where – задает условия выполнения подзапроса. Структура данных выборки должна соответствовать структуре данных таблице, в которую производится добавление.

Добавление записей возможно и во внешнюю базу данных, для которой указывается полностью ее имя (диск, каталог, имя, расширение).

Insert Into Студент Select [Студент_заочник]*

From [Студент_заочник]

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

Insert Into Студент Select [Студент_заочник].*

From [Студент_заочник]

Where [Дата рождения] >= #01/01/80#

Записи таблицы Студент_заочник добавляются в таблицу Студент, если дата рождения студента больше или равна указанной.

Когда предложение INSERT INTO включается в инструкцию, оно предшествует слову Select.

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

Прежде чем выполнить запрос на добавление, полезно выяснять, какие записи будут добавлены к адресату. Для этого можно запустить запрос типа SELECT с теми же критери­ями выбора и просмотреть его результаты.

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

Удаление записей в запросе. Записи из одной или больше таблиц, перечисленных в предложении FROM, которые удов­летворяют условиям предложения WHERE, можно удалить с помощью запроса на удаление записей. Синтаксис его следующий:

DELETE [таблица.*]

FROM таблицы

WHERE критерии

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

Инструкция DELETE особенно полезна, когда требуется удалить много записей.

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

Если требуется удалить все записи таблицы, удаление всей таблицы может быть более эффективным, чем выполнение запроса на удаление. Чтобы удалить таблицу из базы данных, можно использовать метод Execute с инструкцией DROP TABLE. Однако при удалении таблицы структура ее будет потеряна. С другой стороны, когда используется инструкция DELETE, удаляются только данные; структура таблицы и все свойства таблицы, такие как атрибуты полей и индексы, остаются без изменений.

Инструкцией DELETE можно удалить записи из отдельной таблицы или из таблиц стороны «многие» отношения один-к-многим. Например, в отношении между таблицами Заказчики и Заказы таблица Заказы — сторона «многие», поэтому операции удаления в запросе будут воздействовать только на таблицу Заказы.

Запрос DELETE удаляет записи полностью, а не только данные в определенных полях. Если требуется удалить значения в определенном поле, следует создать запрос UPDATE (см. ниже), который изменяет значения в поле на Null.

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

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

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

UPDATE имя_таблицы

SET имя_столбца = новое_значение

WHERE критерии_отбора ;

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

Часть WHERE является необязательной, так же как и в операторе DELETE. Она играет здесь ту же роль, что и в операторе DELETE, — позволяет отобрать строки, к которым будет применена операция модификации. Если условие отбора не за­дается, то операция модификации будет применена ко всем строкам таблицы.

Запрос UPDATE особенно полезен, когда требуется изменить много записей или когда записи, которые требуется изменить, находятся в нескольких таблицах. Обычно такой запрос используется с методом Execute.

В следующем примере для грузоотправи­телей из России значения в поле Объем заказа увеличиваются на 10 процентов, а значения в поле Стоимость перевозки уменьшаются на 3 процента:

UPDATE Заказы _

SET [Объем заказа] = [Объем заказа] * 1.1, _

[Стоимость перевозки] = [Стоимость перевозки] * .97 _

WHERE [Страна] = 'RU';

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

Операция модификации, так же как и операция удаления, может использовать сложные подзапросы.