|
Программирование >> Понятие sql
СТОЛБЦЫ ОПИСАНИЕ username Пользователь который имеет привилегии grantor Пользователь который предоставляет привилегии другому пользователю tname Имя таблицы в которой существуют привилегии cname Имя столбца в котором существуют привилегии owner Владелец tname updauth Имеет ли пользователь привилегию UPDATE в этом столбце refauth Имеет ли пользователь привилегию REFERENCES в этом столбце Столбцы updauth и refauth могут быть в состоянии Y, N, или G; но не могут быть одновременно в состоянии N для одной и той же строки. Это - первые пять столбцов таблицы, которы не составляют первичный ключ. Он отличается от первичного ключа SYSTEMTABAUTH в котором содержится поле cname, указывающее на определенный столбец обсуждаемой таблицы для которой применяются одна или обе привилегии. Отдельная строка в этой таблице может существовать для каждого столбца в любой данной таблицы в которой одному пользователю передаются превилегии определенного столбца с помощью другого пользователя. Как и в случае с SYSTEMTABAUTH та же привилегия может быть описана в более чем одной строке этой таблицы если она была передана более чем одним пользователем. ТИПОВОЙ ЗАПРОС Чтобы выяснить, в каких столбцах какой таблицы вы имеете привилегию REFERENCES, вы можете ввести следующий запрос (вывод показывается в Рисунке 24.7) SELECT owner, tname, cname FROM SYSTEMCOLAUTH WHERE refauth IN (Y, G) AND username = USER ORDER BY 1, 2; который показывает, чтоэтидветаблицы, которые имеют различных владельцев, но одинаковые имя, в действительности, совершенно разные таблицы (т.е. этонекакдва синонима для одной таблицы). SQL Execution Log SELECT OWNER, TNAME, CNAME FROM SYSTEMCOLAUTH WHERE refaulth IN (Y , G ) AND username = USER ORDER BY 1, 2 owner tname Customers Salespeople Salespeople Customers cname cnum sname sname cnum Diane Diane Diane Gillan Рисунок 24.7: Столбцы в пользователь имеет привилегию INSERT SYSTEMSYNONS - СИНОНИМЫ ДЛЯ ТАБЛИЦ В БАЗЕ ДАННЫХ Это - имена столбцов в таблице SYSTEMSYNONS и их описание: СТОЛБЕЦ ОПИСАНИЕ synonym Имя синонима synowner Пользователь, который является владельцем синонима (может быть PUBLIC (ОБЩИЙ)) tname Имя таблицы используемой владельцем tabowner Имя пользователя который является владельцем таблицы ТИПОВОЙ ЗАПРОС Предположим, что Adrian имеет синоним Clients для таблицы Заказчиков, принадлежащей Diane, и что имеется общий синоним Customers для этой же таблицы. Вы делаете запрос таблицы для всех синонимов в таблице Заказчиков (вывод показывается в Рисунке 24.8): SELECT * FROM SYSTEMSYNONS WHERE tname = Customers SQL Execution Log SELECT * FROM SYSTEMSYNONS WHERE tname = Customers synonym Clients Customers synowner Adrian PUBLIC tname Customers Customers tabowner Diane Diane Рисунок 24.8: Синонимы для таблицы Заказчиков ДРУГОЕ ИСПОЛЬЗОВАНИЕ КАТАЛОГА Конечно, вы можете выполнять более сложные запросы в системном каталоге. Обьединения, например, могут быть очень удобны. Эта команда позволит вам увидеть столбцы таблиц и базовые индексы, установленые для каждого (вывод показывается в Рисунке 24.9): SELECT a.tname, a.cname, iname, cposition FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b WHERE a.tabowner = b.tabowner AND a.tname = b.tname AND a.cnumber = b.cnumber ORDER BY 3 DESC, 2; Она показывает два индекса, один для таблицы Заказчиков и один для таблицы Продавцов. Последний из них - это одностолбцовый индекс с именем salesno вполе snum; он был помещен первым из-за сортировки по убыванию (в обратном алфавитном порядке) в столбце iname. Другой индекс, custsale, используется продавцами, чтобы отыскивать своих заказчиков. Он основывается на комбинации полей snum и cnum внутри таблицы Заказчиков, с полем snum приходящим в индексе первым, как это и показано с помощью поля cposition. =============== SQL Execution Log ================ SELECT a.tname, a.cname, iname, cposition FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b WHERE a.tabowner = b.tabowner AND a.tname = b.tname AND a.cnumber = b.cnumber ORDER BY 3 DESC, 2; tname cname iname cposition Salespeople sname salesno 1 Customers cnum custsale 2 Customers snum custsale 1 Рисунок 24.9: Столбцы и их индексы Подзапросы также могут быть использованы. Имеется способ увидеть данные столбца только для столбцов из таблиц каталога: SELECT * FROM SYSTEMCOLUMNS WHERE tname IN (SELECT tname FROM SYSTEMCATALOG); Для простоты, мы не будем показывать вывод этой команды, которая состоит из одного входа для каждого столбца каждой таблицы каталога. Вы могли бы поместить этот запрос в представление, назвав его, например, SYSTEMTABCOLS, для представления SYSTEMTABLES. РЕЗЮМЕ Итак, система SQL использует набор таблиц, называемый системным каталогом в структуре базы данных. Эти таблицы могут запрашиваться но модифицироваться. Кроме того, вы можете добавлять комментарии столбцов в (и удалять их из) таблицы SYSTEMCATALOG и SYSTEMCOLUMNS. Создание представлений в этих таблицах - превосходный способ точно определить, какая пользовательская информация может быть доступной. Теперь, когда вы узнали о каталоге, вы завершили ваше обучение SQL вдиало-говом режиме. Следующая глава этой книги расскажет вам, как SQL используется в программах, которые написаны прежде всего на других языках, но которые способны извлечь пользу из возможностей SQL, взаимодействуя с его таблицами базы данных. РАБОТА С SQL 1. Сделайте запрос каталога чтобы вывести, для каждой таблицы имеющей более чем четыре столбца, имя таблицы, имя владелеца, а также имя столбцов и тип данныхэтихстолбцов. 2. Сделайте запрос каталога чтобы выяснить, сколько синонимов существует для каждой таблицы в базе данных. Не забудьте, что один и тот же синоним принадлежащий двум различным пользователям - это фактически два разных синонима. 3. Выясните сколько таблиц имеют индексы в более чем пятьдесяти процентов их столбцов. (См. Приложение A для ответов.)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |