
- •Сущность, связь, степень связи, класс принадлежности.
- •Нормализация баз данных. Нфбк, четвертая и пятая нормальные формы.
- •3.1. Диаграммы er-экземпляров и er-типа для степени связи 1:1 и различных классах принадлежности сущностей.
- •4.4.Безопасность. Уровни доступа к бд и отношениям.
- •5.1. Создание бд и таблиц. Работа с таблицами. Создание базы данных
- •Создание и работа с таблицами
- •6.4. Инструкция манипулирования данными – dml: удаление ввод и изменение таблиц, создание индексов.
- •Изменение данных
- •7.6. . Спроектировать реляционную базу данных
6.4. Инструкция манипулирования данными – dml: удаление ввод и изменение таблиц, создание индексов.
Добавление данных
Перед тем как начать изменение данных в таблицах или выборку данных из таблиц, необходимо их вставить. Данные в таблицу SQL Server 2000 могут быть внесены различными способами.
- С помощью команды INSERT. Используя единственную команду INSERT, можно добавить как одну строку, так и множество строк. Причем разрешается указание вставляемых значений как с помощью переменных (или констант), так и с помощью запроса.
- С помощью команды SELECT INTO. В этом случае на основе результата выборки, возвращаемого запросом, сервер автоматически создает новую таблицу.
- Посредством применения механизмов массового копирования данных, используемых для вставки в таблицу множества строк, данные которых располагаются в текстовых файлах. Этот способ предполагает использование утилиты командной строки bср или команды BULK INSERT.
- С помощью программного интерфейса баз данных (Database API). Этот способ включает использование механизмов ADO, OLE DB, ODBC и DB-Library.
- С помощью возможностей Data Transformation Services. Используя эту технологию, можно выполнять сложные операции переноса и трансформации данных из множества распределенных гетерогенных источников информации, таких, например, как Oracle, Excel, Paradox, Access и многих других.
Механизмы ADO, OLE DB, ODBC и DB-Library в этой лекции не рассматриваются. Для поиска информации по управлению данными с использованием этих методов нужно обратиться к специализированной литературе. Также не рассматривается использование служб трансформации данных (Data Transformation Services).
Изменение данных
Для изменения данных можно использовать различные методы, включая удаление и повторную вставку строк. Чаще всего изменение данных производится с помощью команды UPDATE, позволяющей выполнять как простое обновление данных в столбце, так и сложные операции модификации данных во множестве строк таблицы. Если алгоритм изменения данных достаточно сложен, то чтобы избавить пользователей от необходимости написания сложных запросов, можно создать хранимую процедуру, которая и будет изменять данные в таблице. Хранимые процедуры также могут быть использованы в тех случаях, когда пользователям нельзя предоставлять прямой доступ к таблицам. Чтобы выполнить модификацию данных, пользователю нужно будет вызвать соответствующую процедуру, которая и выполнит изменения. Аналогичным образом можно поступить и для реализации вставки, удаления и выборки данных.
Итак, изменение данных выполняется с помощью команды UPDATE. Рассмотрим синтаксис этой команды:
UPDATE
{table_name WITH ( <table_hint_limited>)
| view_name
| rowset_function_limited}
SET
{column_name = (expression | DEFAULT | NULL )
| @variable = expression
| @variable = column = expression }
{ [ FROM (<table_source>)]
[ WHERE <search__condition>]}
[ WHERE CURRENT OF
{( [ GLOBAL ] cursor_narne ) | cursor_variable_name]}
[OPTION ( <query_hint>)]
Рассмотрим подробно назначение каждого из аргументов.
- tab1e_name. Имя таблицы, в которой необходимо произвести изменение данных.
- [WITH ( <table_hint_limited> [.. .n])]. С помощью этого параметра можно управлять режимом блокирования данных в таблице на время выполнения команды UPDATE.
- view_name. Имя представления, данные в котором необходимо модифицировать.
- rowset_function_limited. Этот параметр подразумевает использование функции для работы с наборами строк — OPENQUERY или OPENROWSET, которая определяет набор изменяемых данных. Указанные функции позволяют реализовать возможности технологии OLE DB и работать с данными, расположенными не на сервере Microsoft SQL Server.
- SET. С ключевого слова SET начинается блок, в котором определяется список изменяемых столбцов или переменных. Команда UPDATE позволяет изменять не только столбцы таблицы, но и значения переменных. В одной команде допускается изменение и столбцов и переменных. За один вызов UPDATE можно изменить данные в нескольких столбцах множества строк одной таблицы.
- column_name = {expression | DEFAULT | NULL}. Для каждого изменяемого столбца нужно определить значение, которое он примет после выполнения изменения. С помощью ключевого слова DEFAULT можно присвоить столбцу значение, определенное для него по умолчанию. Можно также установить для столбца значение NULL. Если необходимо установить определенное значение, следует указать константу, переменную или выражение.
@variable = expression. Этот аргумент определяет имя переменной, с которой можно оперировать при выполнении команды. Данные в таблице при этом не изменяются. Все необходимые изменения выполняются в переменной. Такой подход можно использовать, например, для подсчета количества строк, удовлетворяющих определенному условию.
@variable = column = expression. Эта конструкция позволяет сочетать использование переменных и имен столбцов.
FROM {<table_source>}. Если при изменении данных в таблице необходимоучесть состояние данных в других таблицах (представлениях), то эти источникиданных необходимо указать в разделе From.
WHERE <search_condition> Назначение раздела Where, используемого в запросе Update, полностью соответствует назначению, которое раздел имеет в запросе Select.
WHERE CURRENT OF. Использование этой конструкции заставляет сервер выполнять обновление данных в строке, являющейся текущей в указанном курсоре.
Курсор – механизм обмена данными между сервером и клиентом. Он позволяет клиентским приложениям работать не с полным наботом данных, а лишь с одной конкретной строкой.
([GLOBAL] cursor_name | cursor_variable_name). Эта конструкция используется совместно с предыдущим параметром и определяет имя курсора. Ключевое слово Global говорит серверу о том, что курсор глобальный.
OPTION (<query_hint> […n]). Ключевое слово Option определяет набор хинтов, управляющих блокировкой курсора на время выполнения запроса.
Хинты – это специальные ключевые слова, распознаваемые оптимизатором запроса.