- •Введение
- •Глава 1. Проектирование баз данных
- •1.1. История развития баз данных и субд
- •1.2. Введение в субд
- •1.2.1. Основные термины, понятия и определения
- •1.2.2. Классификация субд
- •1) Сетевые, корпоративные, распределенные, клиент-серверные, полнофункциональные, масштабируемые, “большие” субд.
- •2) Локальные, персональные, настольные, файл-серверные, “малые” субд.
- •1.3. Модели данных
- •1.3.1. Типы связей между объектами
- •1.3.2. Формы записи инфологической (концептуальной) модели
- •1.3.3. Уровни представления и независимости данных
- •1.3.4. Порядок взаимодействия пользователя, субд и ос
- •1.3.5. Поддержка целостности базы данных
- •1.3.6. Иерархическая модель
- •1.3.7. Сетевая модель
- •1.3.8. Реляционная модель
- •1.3.8.1. Отношения
- •1.3.8.2. Теоретико-множественные операции с отношениями
- •1.3.8.3. Правила Кодда
- •1.3.8.4. Индексирование таблиц
- •1.3.8.5. Связывание таблиц
- •1.3.9. Постреляционная модель
- •1.3.10. Многомерная модель
- •1.3.11. Объектно‑ориентированная модель
- •1.4. Модели использования баз данных в сети
- •1.4.1. Сеть
- •1.4.2. Модели использования баз данных
- •1.4.2.1. Локальная однопользовательская модель
- •1.4.2.2. Файл-серверная модель
- •1.4.2.3. Клиент-серверная модель
- •В моделях «клиент–сервер»
- •1.4.2.4. Модель удаленного доступа (rda)
- •1.4.2.5. Модель сервера данных
- •1.4.2.6. Трехзвенная распределенная модель
- •1.4.2.7. Модели серверов баз данных
- •1.4.2.8. Клиент-Интернет
- •1.4.2.9. ИнтерфейсOdbc
- •1.4.3. Мониторы обработки транзакций (tpm)
- •1.4.4. Децентрализованное управление базами данных
- •1.4.5. Таблицы в локальных сетях
- •1.5. Проектирование баз данных
- •1.5.1. Принципы и этапы проектирования и создания баз данных
- •1.4.Определение доменов атрибутов.
- •1.5. Определение первичных и вторичных ключей.
- •1.6. Определение суперклассов и подклассов для типов сущностей.
- •1.7. Создание er‑диаграмм для отдельных пользователей.
- •2.6. Создание er‑диаграмм для отдельных пользователей.
- •3.4. Создание er‑диаграммы глобальной логической модели.
- •4. Создание глобальной логической модели в среде целевой субд.
- •6. Разработка механизма защиты.
- •1.5.3. Правила формирования взаимосвязанных таблиц
- •1.5.4. Модели жизненного цикла и проектирование баз данных
- •1.5.4.1. Модели жизненного цикла
- •1.5.4.2. Обследование, системный анализ и постановка задачи
- •1.5.4.3. Инфологическое проектирование
- •1.5.4.4. Датологическое проектирование
- •1.5.4.5. Проектирование физической модели
- •1.5.4.6. Реализация, интеграция и внедрение
- •1.5.5. Выбор субд
- •1.5.5.1. Сравнение Visual FoxPro, Access, sql Server, Oracle и Excel
- •1.5.5.2. Методика балловой оценки программных средств
- •1.5.6. Case‑средства автоматизации проектирования
- •1. Ориентация на этапы жизненного цикла
- •2. Функциональная полнота
- •Пользователя в ms sql Server 7.0
- •1.6.2. Резервирование информации
- •1.6.3. Варианты разработки приложений
- •1.7. Стандартизация баз данных
- •1.8. ЯзыкSql
- •1.8.1. Введение вSql
- •1.8.2. Типы данныхSql
- •1.8.3. Оператор выбора данныхSelect
- •1.8.3.1. Назначение и синтаксис оператора
- •1.8.3.2. Объединение таблиц
- •1.8.3.3. Вложенные и коррелированные запросы
- •1.8.3.4. Запросы, использующиеExist, any, all
- •1.8.3.5. Стандартные функции
- •1.8.3.6. Запрос с группировкой
- •1.8.4. Операторы обновления базы
- •1.8.4.1. Оператор корректировки данныхUpdate
- •1.8.4.2. Оператор удаления записейDelete
- •1.8.4.3. Оператор включения записей insert
- •1.8.5. Представления
- •1.9. Транзакции
- •1.9.1. Определение транзакций
- •1.9.2. Организация транзакций
- •1.9.3. Журнал транзакций
- •1.9.4. Журнализация и буферизация
- •1.9.5. Индивидуальный откат транзакций
- •1.9.6. Восстановление после мягкого сбоя
- •1.9.7. Физическая согласованность базы данных
- •1.9.8. Восстановление после жесткого сбоя
- •1.9.9. Параллельное выполнение транзакций
- •1.9.10. Уровни изолированности пользователей
- •1.9.11. Гранулированные синхронизационные захваты
- •1.9.12. Предикатные синхронизационные захваты
- •1.9.13. Метод временных меток
- •1.10. ВстроенныйSql
- •1.10.1. Особенности встроенногоSql
- •1.10.2. Определение курсора
- •1.10.3. Открытие курсора
- •1.10.4. Чтение очередной строки курсора
- •1.10.5. Закрытие курсора
- •1.10.6. Удаление и обновление данных
- •1.10.7. Хранимые процедуры
- •Хранимой процедуры на сервере
- •1.10.8. Триггеры
- •1.10.9. ДинамическийSql
- •1.11. Архитектура субд и оптимизация запросов
- •1.12. Перспективы развития субд
- •Вопросы для самопроверки и контроля
- •1Оглавление
1.8.4. Операторы обновления базы
1.8.4.1. Оператор корректировки данныхUpdate
Оператор UPDATE имеет следующий общий формат:
UPDATE таблица SET поле = выражение [, поле = выражение]…
[WHERE условие];
Все записи в таблице, которые удовлетворяют условию, обновляются в соответствии с присваиваниями «поле = выражение» во фразе SET.
Пример изменения одной записи. Изменить цвет детали Р2 на желтый, увеличить ее вес на 5 и установить значение города «неизвестен» (NULL).
UPDATE P SET ЦВЕТ = 'Желтый', ВЕС = ВЕС + 5, ГОРОД = NULL WHERE НОМЕР_ДЕТАЛИ = 'Р2';
Пример изменения группы записей. Удвоить состояние всех поставщиков, находящихся в Лондоне.UPDATE S SET СОСТОЯНИЕ = 2*СОСТОЯНИЕ WHERE ГОРОД = 'Лондон';
Пример изменения с подзапросом. Установить объем поставок равным нулю для всех поставщиков из Лондона.
UPDATE SP SET КОЛИЧЕСТВО = 0 WHERE 'Лондон' = (SELECT ГОРОД FROM S WHERE S.НОМЕР_ПОСТАВЩИКА = SP.НОМЕР_ПОСТАВЩИКА); Примеробновления нескольких таблиц. Изменить номер поставщика S2 на S9.
UPDATE S SET НОМЕР_ПОСТАВЩИКА = 'S9'
WHERE НОМЕР_ПОСТАВЩИКА = 'S2';
UPDATE SP SET НОМЕР_ПОСТАВЩИКА = 'S9'
WHERE НОМЕР_ПОСТАВЩИКА = 'S2';
В предложении UPDATE должна специфицироваться в точности одна таблица.Поэтому в данном примере мы сталкиваемся со следующей проблемойцелостности: база данных становится противоречивой после выполнения первого предложения UPDATE – она включает теперь некоторые поставки, для которых не имеется соответствующей записи о поставщике, и остается в таком состоянии до тех пор, пока не будет выполнено второе предложение UPDATE. Изменение порядка предложений UPDATE, конечно, не решает эту проблему. Поэтому важно обеспечить выполнениеобоихэтих предложений, а не только одного.
1.8.4.2. Оператор удаления записейDelete
Оператор DELETE имеет следующий общий формат:
DELETE FROM таблица [WHERE условие];
Удаляются все записи в «таблице», которые удовлетворяют условию. Примерудаления единственной записи. Удалить поставщика S1.DELETE FROM S WHERE НОМЕР_ПОСТАВЩИКА= 'S1’.
Примерудаления группы записи. Удалить всех поставщиков из Лондона.DELETE FROM S WHERE ГОРОД = 'Лондон';
Примерудаления всех записей. Удалить все поставки.
DELETE FROM SP;
Примерудаления с подзапросом. Удалить все поставки для поставщиков из Лондона.
DELETE FROM SP WHERE 'Лондон' = (SELECT ГОРОД FROM S WHERE S. НОМЕР_ПОСТАВЩИКА =SP.НОМЕР_ПОСТАВЩИКА);
1.8.4.3. Оператор включения записей insert
Оператор INSERT имеет следующий общий формат:
INSERT INTO таблица [(поле [,поле]…)] VALUES (константа [,константа…); ИЛИ: INSERT INTO таблица [(поле [,поле] . . .)] подзапрос;
В первом формате в «таблицу» вставляется строка, имеющая заданные значения для указанных полей, причем 1-я константа в списке констант соответствует i-му полю в списке полей.
Во втором формате вычисляется «подзапрос»; копия результата, представляющего собой, вообще говоря, множество строк, вставляется в «таблицу». При этом i-й столбец этого результата соответствуетi-му полю в списке полей. В обоих случаях отсутствие списка полей эквивалентно спецификации списка всех полей в таблице.
Пример вставки единственной записи. Добавить в таблицу Р деталь Р7 (город 'Атенс', вес – 2, название и цвет в настоящее время неизвестны).
INSERT INTO Р (НОМЕР_ДЕТАЛИ, ГОРОД, BEC) VALUES ('Р7', 'Атенс', 2);
Порядок слева – направо, в котором поля указаны в предложении INSERT, не обязательно должен совпадать с порядком слева – направо, в записи таблицы.
Пример вставки единственной записи без указания имен полей. Добавить деталь Р8 в таблицу Р, при этом: название - 'Звездочка', цвет - 'Розовый', вес – 14, город – 'Ницца'.
INSERT INTO P VALUES ('Р8', 'Звездочка', 'Розовый', 14, 'Ницца');
Отсутствие списка полей эквивалентно спецификации списка всех полей в таблице в порядке слева – направо, как они были определены в записи таблицы.
Пример вставки группы записи. Для каждой поставляемой детали получить ее номер и общий объем поставок, сохранить результат в базе данных.CREATE TABLE ВРЕМЕННАЯ (НОМЕР_ДЕТАЛИ CHAR (6), ОБЪЕМ_ПОСТАВКИ INTEGER); INSERT INTO ВРЕМЕННАЯ (НОМЕР_ДЕТАЛИ, ОБЪЕМ_ПОСТАВКИ) SELECT НОМЕР_ДЕТАЛИ, SUM (КОЛИЧЕСТВО) FROM SP GROUP BY НОМЕР_ДЕТАЛИ;
Здесь предложение SELECT выполняется точно так же, как обычно, но результат не возвращается пользователю, а копируется в таблицу ВРЕМЕННАЯ. В конечном счете таблицу ВРЕМЕННАЯ можно будет уничтожить, когда она больше не будет нужна:
DROP TABLE ВРЕМЕННАЯ;
Целевая таблица вовсе не обязательно должна быть первоначально пустой для вставки множества записей. Если таблица не пуста, новые записи просто добавляются к тем, которые уже имеются.