
- •"Понимание 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
Отмена привилегий
Также как ANSI предоставляет команду CREATE TABLE чтобы создать таблицу, а не DROP TABLE чтобы от нее избавиться, так и команда GRANT позволяет вам давать привилегии пользователям, не предоставляя способа чтобы отобрать их обратно. Потребность удалять привилегии сводится к команде REVOKE, фактически стандартному средству с достаточно понятной формой записи.
Синтаксис команды REVOKE - похож на GRANT, но имеет обратный смысл.
Чтобы удалить привилегию INSERT для Adrian в таблице Порядков, вы можете ввести
REVOKE INSERT ON Orders FROM Adrian;
Использование списков привилегий и пользователей здесь допустимы как и в случае с GRANT, так что вы можете ввести следующую команду:
REVOKE INSERT, DELETE ON Customers
FROM Adrian, Stephen;
Однако, здесь имеется некоторая неясность. Кто имеет право отменять привилегии? Когда пользователь с правом передавать привелегии другим, теряет это право? Пользователи которым он предоставил эти привилегии, также их потеряют ? Так как это не стандартная особенность, нет никаких авторитетных ответов на эти вопросы, но наиболее общий подход - это такой:
Привилегии отменяются пользователем который их предоставил, и отме на будетт каскадироваться, то-есть она будет автоматически распростра няться на всех пользователям получивших от него эту привилегию.
Использование представлений для фильтрации привелегий
Вы можете сделать действия привилегий более точными, используя представления. Всякий раз, когда вы передаете привилегию в базовой таблице пользователю, она автоматически распространяется на все строки, а при использовании возможных исключений UPDATE и REFERENCES, на все столбцы таблицы.
Создавая представление которое ссылается на основную таблицу и затем переносит привилегию на представление, а не на таблицу, вы можете ограничивать эти привилегии любыми выражениями в запросе содержащимся в представлении. Это значительно улучшает базисные возможности команды GRANT.
Кто может создавать представления?
Чтобы создавать представление, вы должны иметь привилегию SELECT во всех таблицах на которые вы ссылаетесь в представлении. Если представление - модифицируемое, любая привелегия INSERT, UPDATE, и DELETE которые вы имеете в базовой таблице, будут автоматически передаваться представлению. Если вы испытываете недостаток в привилегиях на модификацию в базовых таблицах, вы не сможете иметь их и в представлениях которые создали, даже если сами эти представления - модифицируемые. Так как внешние ключи не используются в представлениях, привилегия REFERENCES никогда не используется при создании представлений.
Все эти ограничения - определяются ANSI. Нестандартные привилегии системы ( обсуждаемые позже в этой главе ) также могут быть включены. В последующих разделах мы предположим, что создатели представлений которые мы обсуждаем, имеют частные или соответствующие привилегии во всех базовых таблицах.
Ограничение привилегии select для определенных столбцов
Предположим вы хотите дать пользователю Claire способность видеть только столбцы snum и sname таблицы Продавцов. Вы можете сделать это, поместив имена этих столбцов в представление
CREATE VIEW Clairesview
AS SELECT snum, sname
FROM Salespeople;
и предоставить Claire привилегию SELECT в представлении, а не в самой таблице Продавцов:
GRANT SELECT On Clairesview to Claire;
Вы можете создать привилегии специально для столбцов наподобии использования других привилегий, но, для команды INSERT, это будет означать вставку значений по умолчанию, а для команды DELETE, ограничение столбца не будет иметь значения. Привелегии REFERENCES и UPDATE, конечно, могут сделать столбцы специфическими не прибегая к представлению.
ОГРАНИЧЕНИЕ ПРИВЕЛЕГИЙ ДЛЯ ОПРЕДЕЛЕННЫХ СТРОК
Обычно, более полезный способ чтобы фильтровать привилегии с представлениями - это использовать представление чтобы привилегия относилась только к определенным строкам. Вы делаете это, естественно, используя предикат в представлении который определит, какие строки являются включенными. Чтобы предоставить пользователю Adrian, привилегию UPDATE в таблице Заказчиков, для всех заказчиков размещенных в Лондоне, вы можете создать такое представление:
CREATE VIEW Londoncust
AS SELECT *
FROM Customers
WHERE city = 'London'
WITH CHECK OPTION;
Затем Вы должны передать привилегию UPDATE в этой таблице для Adrian:
GRANT UPDATE ON Londoncust TO Adrian;
В этом отличие привилегии для определенных строк от привилегии UPDATE для определенных столбцов, которая распространена на все столбцы таблицы Заказчиков, но не на строки, среди которых строки со значением поля city иным чем London не будут учитываться. Предложение WITH CHECK OPTION предохраняет Adrian от замены значения поля city на любое значение кроме London.