
- •"Понимание sql"
- •Введение в реляционную базу данных гл.1 введение
- •Понимание sql
- •Что такое - реляционная база данных?
- •Описание реляционных баз данных связывание одной таблицы с другой
- •Порядок строк произволен
- •Идентификация строк ( первичные ключи )
- •Столбцы именуются и нумеруются
- •************** Работа с sql **************
- •Гл.2 sql : обзор
- •Понимание sql
- •Sql: краткий обзор
- •Что делает ansi ?
- •Интерактивный и вложенный sql
- •Субподразделения sql
- •Sql несогласованности
- •Что такое - пользователь?
- •Условия и терминология
- •************** Работа с sql **************
- •Гл.3 использование sql для извлечения информации из таблиц
- •Что такое запрос ?
- •Где применяются запросы ?
- •Команда select
- •Выбирайте всегда самый простой способ
- •Описание select
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Distinct вместо all
- •Квалифицированный выбор при
- •************* Работа с sql ***************
- •Гл.4 использование реляционных и булевых операторов для создания более изощренных предикатов
- •Понимание sql
- •************** Работа с sql **************
- •Гл.5 использование специальных операторов в условиях понимание sql
- •Работа с нулевыми( null ) значениями
- •Использование not со специальными операторами
- •************** Работа с sql **************
- •Гл.6 обобщение данных с помощью агрегатных функций понимание sql
- •Как использовать агрегатные функции ? cуммирование данных с помощью агрегатных функций
- •Специальные атрибуты count
- •Использование distinct
- •Использование count со строками, а не значениями
- •Включение дубликатов в агрегатные функции
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Не делайте вложенных агрегатов
- •************** Работа с sql **************
- •Гл.7 формирование выводов запросов
- •Понимание sql
- •Столбцы вывода
- •Помещение текста в вашем выводе запроса
- •Упорядочение с помощью многочисленых столбцов
- •Упорядочение агрегатных групп
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью опретора null
- •************** Работа с sql **************
- •Гл.8 запрашивание многочисленых таблиц также как одной
- •Имена таблиц и столбцов
- •Создание обьединения
- •Объединение таблиц через справочную целостность
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •Объединение более двух таблиц
- •************** Работа с sql **************
- •Гл.9 объединение таблицы с собой
- •Псевдонимы
- •Устранение избыточности
- •Проверка ошибок
- •Больше псевдонимов
- •Еще больше комплексных объединений
- •************** Работа с sql **************
- •Гл.10 вставка одного запроса внутрь другого
- •Значения, которые могут выдавать подзапросы
- •Distinct с подзапросами
- •Предикаты с подзапросами являются необратимыми
- •Использование агрегатных функций в подзапросах
- •Использование подзапросов которые выдают много строк с помощью оператора in
- •Подзапросы выбирают одиночные столбцы
- •Использование выражений в подзапросах
- •Подзапросы в предложении having
- •*************** Работа с sql *************
- •Гл.11 соотнесенные подзапросы
- •Как сформировать
- •Как работает соотнесенный подзапрос
- •Использование соотнесенных подзапросов для нахождения ошибок
- •Сравнение таблицы с собой
- •Соотнесенные подзапросы в предложении having
- •Соотнесенные подзапросы и обьединения
- •*************** Работа с sql *************
- •Гл.12 использование оператора exists
- •Выбор столбцов с помощью exists
- •Использование exists с соотнесенными подзапросами
- •Комбинация из exists и обьединения
- •Использование not exists
- •Exists и агрегаты
- •Более удачный пример подзапроса
- •Гл.13 использование операторов any, all и some
- •Использование операторов any, all, и some
- •Использование операторов in или exists вместо оператора any
- •Использование операторов any, all, и some
- •Как any может стать неоднозначным
- •Равенства и неравенства
- •Правильное понимание any и all
- •Any и all вместо exists с пустым указателем( null )
- •Использование count вместо exists
- •Гл.14 использование предложения union
- •Запросов в один
- •Когда вы можете делать объединение между запросами ?
- •Union и устранение дубликатов
- •Использование строк и выражений с union
- •Внешнее объединение
- •Гл.15 ввод, удаление и изменение значений полей
- •Insert (вставить),
- •Вставка пустых указателей (null)
- •Именование столбца для вставки (insert)
- •Вставка результатов запроса
- •Модифицирование только определенных строк
- •Команда update для многих столбцов
- •Использование выражений для модификации
- •Гл.16 использование подзапросов с командами модификации
- •Не вставляйте дубликаты строк
- •Использование подзапросов созданых во внешней таблице запроса
- •Столкновение с ограничениями подзапросов команды dml
- •************** Работа с sql **************
- •Гл.17 создание таблиц понимание sql
- •Уникальность индекса
- •Удаление индексов
- •Изменение таблицы после
- •**************** Работа с sql ************
- •Гл.18 ограничение значений ваших данных понимание sql
- •Объявление ограничений
- •Использование ограничений для исключения пустых( null ) указателей
- •Убедитесь что значения - уникальны
- •Уникальность как ограничение столбца
- •Уникальность как ограничение таблицы
- •Ограничение первичных ключей
- •Первичные ключи более чем одного поля
- •Проверка значений полей
- •Использование - check, чтобы предопределять допустимое вводимое значение
- •Проверка условий базирующийся на многочисленых полях
- •Установка значений поумолчанию
- •Гл.19 поддержка целостности ваших данных понимание sql
- •Много-столбцовые внешние ключи
- •Смысл внешнего и родительского ключей
- •Как можно поля представить в качестве внешних ключей
- •Внешний ключ как ограничение таблицы
- •Внешний ключ как ограничение столбцов
- •Не указывать список столбцов первичных ключей
- •Как справочная целостность ограничивает значения родительского ключа
- •Первичный ключ как уникальный внешний ключ
- •Ограничения внешнего ключа
- •Что случится, если вы выполните команду модификации
- •Действие ограничений
- •Внешние ключи которые ссылаются обратно к их подчиненым таблицам
- •*************** Работа с sql *************
- •Гл.20 введение: представления
- •Модифицирование представлений
- •Комбинирование предикатов представлений и основных запросов в представлениях
- •Групповые представления
- •Представления и обьединения
- •Представления и подзапросы
- •Что не могут делать представления
- •Удаление представлений
- •*************** Работа с sql *************
- •Гл.21 изменение значений с помощью представлений
- •Определение модифицируемости представления
- •Модифицируемые представления и представления только_чтение.
- •Что является - модифицируемыми представлением
- •Проверка значений
- •Предикаты и исключенные поля
- •Проверка представлений которые базируются на других представлениях
- •************** Работа с sql **************
- •Гл.22 кто что может делать в базе данных
- •Регистрация
- •Стандартные привилегии
- •Команда grant
- •Группы привелегий, группы пользователей
- •Ограничение привилегий на определенные столбцы
- •Использование аргументов all и public
- •Предоставление привелегий с помощью with grant option
- •Отмена привилегий
- •Использование представлений для фильтрации привелегий
- •Кто может создавать представления?
- •Ограничение привилегии select для определенных столбцов
- •Предоставление доступа только к извлеченным данным
- •Использование представлений в качестве альтернативы к ограничениям
- •Типичные привилегии системы
- •Создание и удаление пользователей
- •Гл.23 глобальные аспекты sql
- •Переименование с тем же самым именем
- •Одно имя для каждого
- •Удаление синонимов
- •Как база данных распределена для пользователей ?
- •Когда сделанные изменения
- •Как sql общается сразу со многими пользователями
- •Типы блокировок
- •Другие способы блокировки данных
- •************** Работа с sql **************
- •Гл.24 как данные sql содержатся в упорядоченном виде
- •Каталог системы
- •Типичный системный каталог
- •Использование представлений в таблицах каталога
- •Разрешить пользователям видеть(только) их собственные объекты
- •Комментарий в
- •Systemsynons - синонимы для таблиц в базе данных
- •************** Работа с sql **************
- •Гл.25 использование sql с другим языком ( вложенный sql )
- •Что такое - вложение sql
- •Зачем вкладывать sql?
- •Как делаются вложения sql.
- •Использование переменных
- •Объявление переменных
- •Извлечение значений переменных
- •Предложение whenever
- •Использование переменной indicator для эмуляции null значений sql
- •Другое использование переменной indicator
- •************ Работа с sql ***************
- •Приложение a ответы для упражнений
- •Глава 1
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 12
- •Глава 13
- •Глава 14
- •Глава 15
- •Глава 16
- •Глава 18
- •Глава 19
- •Глава 20
- •Глава 21
- •Глава 22
- •Глава 23
- •Глава 25
- •Приложение b типы данных в sql
- •Эквивалентные типы
- •Приложение c некоторые общие нестандартные средства sql
- •Типы date и time
- •Ibm Европейский
- •Ibm Европейский
- •Ibm usa Стандарт hh.Mm am/pm 9.04 pm
- •Типы текстовой строки
- •Математические функции
- •Символьные функции
- •Функции даты и времени
- •Автоматические
- •Приложение d синтаксис и команда ссылки
- •Функциональные элементы
- •Предикаты
- •Приложение e
Как sql общается сразу со многими пользователями
SQL часто используется в многопользовательских средах - в средах, где сразу много пользователей могут выполнять действия в базе данных одновременно. Это создает потенциальную возможность конфликта между различными выполняемыми действиями. Например, предположим что вы выполняете команду в таблице Продавцов :
UPDATE Salespeople
SET comm = comm * 2
WHERE sname LIKE 'R%';
и в это же время, Diane вводит такой запрос:
SELECT city, AVG (comm)
FROM Salespeople
GROUP BY city;
Может ли усредненное значение(AVG) Diane отазить изменения которые вы делаете в таблице? Не важно, будет это сделано или нет, а важно что бы были отражены или все или ни одно из значений комиссионных (comm) для которых выполнялись изменения. Любой промежуточный результат является случайным или непредсказуемым, для порядка в котором значения были изменены физически. Вывод запроса, не должен быть случайным и непредсказуемым.
Посмотрим на это с другой стороны. Предположим, что вы находите ошибку и прокручиваете обратно все ваши модификации уже после того, как Diane получила их результаты в виде вывода. В этом случае Diane получит ряд усредненых значений основанных на тех изменениях которые были позже отменены, не зная что ее информации неточна.
Обработка одновременных транзакций называется - параллелизмом или сов-
падением, и имеет номера возможных проблем которые могут при этом возникать. Имеются следующие примеры:
* Модификация может быть сделана без учета другой модификации. Например, продавец должен сделать запрос к таб лице инвентаризации, чтобы найти десять фрагментов пунктов торго вцев акциями, и упорядочить шесть из их для заказчика. Прежде, чем это изменение было сделано, другой продавец делает запрос к табли це и упорядочивает семь из тех же фразментов для своего заказчика.
_______________________________________________________
ПРИМЕЧАНИЕ: Термин "упорядочить", аналогичен общепринятому - "заказать", что в принципе более соответствует логике запроса, потому что с точки зрения пользователя, он именно "заказывает" информацию в базе данных, которая упорядочивает эту информацию в соответствии с "заказом". ________________________________________________________
Изменения в базе данных могут быть прокручены обратно уже после того, как их действия уже были закончены. Например если Вы отменили вашу ошибку уже после того, как Diane получила свой вывод.
Одно действие может воздействовать частично на результат другого действия. Например когда Diane получает среднее от значений в то время как вы выполняете модификацию этих значений. Хотя это не всегда проблематично, в большинстве случаев действие такое же как если бы агрегаты должны были отразить состояние базы данных в пункте относительной стабильности. Например в ревизион ных книгах, должна быть возможность вернуться назад и найти это существующее усредненное значение для Diane в некоторой времен ной точке, и оставить его без изменений которые можно было бы сде ланы начиная уже с этого места. Это будет невозможно сделать, если модификация была выполнена во время вычисления функции.
Тупик. Два пользователя могут попытаться выполнить дейст вия которые конфликтуют друг с другом. Например, если два пользователя попробуют изменить и значение внешнего ключа и значение родительского ключа одновременно.
Имеется много сложнейших сценариев которые нужно было бы последовательно просматривать, если бы одновременные транзакции были неуправляемыми. К счастью, SQL обеспечивает вас средством управления параллелизмом для точного указания места получения результата. Что ANSI указывает для управления параллелизмом -это что все одновременные команды будут выполняться по принципу - ни одна команда не должна быть выдана, пока предыдущая не будет завершена (включая коман-
ды COMMIT или ROLLBACK ).
Более точно, нужно просто не позволить таблице быть доступной более чем для одной транзакции в данный момент времени. Однако в большинстве ситуаций, необходимость иметь базу данных доступную сразу многим пользователям, приводит к некоторому компромису в управлении параллелизмом. Некоторые реализации SQL предлагают пользователям выбор, позволяя им самим находить золотую середину между согласованностью данных и доступностью к базе данных. Этот выбор доступен пользователю, DBA, или тому и другому.
На самом деле они осуществляют это управление вне SQL, даже если и воздействуют на процесс работы самой SQL.
Механизм используемый SQL для управления параллелизмом операций, называется - блокировкой. Блокировки задерживают определенные операции в базе данных, пока другие операции или транзакции не завершены.
Задержанные операции выстраиваюится в очередь и выполняются только когда блокировка снята ( некоторые инструменты блокировок дают вам возможность указывать NOWAIT, которая будет отклонять команду вместо того чтобы поставить ее в очередь, позволяя вам делать что-нибудь другое).
Блокировки в многопользовательских системах необходимы. Следовательно, должен быть некий тип схемы блокировки по умолчанию, который мог бы применяться ко всем командам в базе данных. Такая схема по умолчанию, может быть определена для всей базы данных, или в качестве параметра в команде CREATE DBSPACE или команде ALTER DBSPACE, и таким образом использовать их по разному в различных DBS. Кроме того, системы обычно обеспечиваются неким типом обнаружителя зависания, который может обнаруживать ситуации, где две операции имеют блокировки, блокирующие друг друга. В этом случае, одна из команд будет прокручена обратно и получит сброс блокировки.
Так как терминология и специфика схем блокировок меняются от программы к программе, мы можем смоделировать наши рассуждения на примере программы базы данных DB2 фирмы IBM. IBM - лидер в этой области (как впрочим и во многих других ), и поэтому такой подход наиболее удобен. С другой стороны, некоторые реализации могут иметь значительные различия в синтаксисе и в функциях, но в основном их действия должно быть очень похожими.