ответы к зачёту по Базам Данных (2009) (1122570), страница 12
Текст из файла (страница 12)
Выполнение триггеров.
По ходу выполнения триггера возможна ситуация, при которой вызывается внутренний (вторичный) триггер, а также третичный и.т.д – глубина вложенности вызовов неограниченна. (Рекурсия, короче).
Выполнению триггера соответствует контекст выполнения. При завершении выполнения внутреннего триггера контекст меняется на контекст внешнего триггера.
-
Общая структура оператора выборки в языке SQL и схема выполнения.
Для выборки данных в прямом SQL используется оператор SELECT, возвращающий набор из одной или нескольких строк одинаковой структуры и задаваемый в следующем синтаксисе:
SELECT [ ALL | DISTINCT ] select_item_commalist
FROM table_reference_commalist
[ WHERE conditional_expression ]
[ GROUP BY column_name_commalist ]
[ HAVING conditional_expression ]
[ ORDER BY order_item_commalist ]
На первом шаге выполняется раздел FROM.
На втором шаге выполняется раздел WHERE. Условное выражение (conditional_expression) этого раздела применяется к каждой строке таблицы T, и результатом является таблица T1, содержащая те и только те строки таблицы T, для которых результатом вычисления условного выражения является true. (Заголовки таблиц T и T1 совпадают.)
Если в операторе выборки присутствует раздел GROUP BY, то он выполняется на третьем шаге.
Каждый элемент списка имен столбцов (column_name_commalist), указываемого в этом разделе, должен быть одним из имен столбцов таблицы T1. В результате выполнения раздела GROUP BY образуется сгруппированная таблица T2, в которой строки таблицы T1 расставлены в минимальное число групп, таких, что во всех строках одной группы значения столбцов, указанных в списке имен столбцов раздела GROUP BY (столбцов группировки), одинаковы.
Если в операторе выборки присутствует раздел HAVING, то он выполняется на следующем шаге. Условное выражение этого раздела применяется к каждой группе строк таблицы T2, и результатом является сгруппированная таблица T3, содержащая те и только те группы строк таблицы T2, для которых результатом вычисления условного выражения является true. Условное выражение раздела HAVING строится по синтаксическим правилам, общим для всех условных выражений, но обладает той спецификой, что применяется к группам строк, а не к отдельным строкам. Поэтому предикаты, из которых строится это условное выражение, должны быть предикатами на группу в целом. В них могут использоваться имена столбцов группировки (инварианты группы) и так называемые агрегатные функции (COUNT, SUM, MIN, MAX, AVG) от других столбцов.
Выполнение раздела ORDER BY производится в последнюю очередь, следующим образом. Выбирается первый элемент списка сортировки, и строки таблицы T4 расставляются в порядке возрастания (если в элементе присутствует спецификация ASC; при отсутствии спецификации ASC/DESC предполагается наличие ASC) или в порядке убывания (при наличии спецификации DESC) в соответствии со значениями выражения, содержащегося в данном элементе, которые вычисляются для каждой строки таблицы T4. Далее выбирается второй элемент списка сортировки, и в соответствии со значениями заданного в нем выражения и порядка сортировки расставляются строки, которые после первого шага сортировки образовали группы с одинаковым значением выражения первого элемента списка сортировки. Операция продолжается до исчерпания списка элементов сортировки. Результирующий отсортированный список строк является окончательным результатом запроса.
-
Представляемые и порождаемые таблицы в SQL. Агрегатные и кванторные функции.
Представляемая таблица – представление таблице, которое можно использовать в операторе выборки наряду с базовыми таблицами
(table_reference ::= table_primary).
оператор создания представления в общем случае определяется следующими синтаксическими правилами (простой вид):
create_view ::= CREATE VIEW table_name
[ column_name_comma_list ]
AS query_expression - запрос
Имя таблицы, задаваемое в определении представления, существует в том же пространстве имен, что и имена базовых таблиц, и, следовательно, должно отличаться от всех имен таблиц (базовых и представляемых), созданных тем же пользователем.
Если имя представления встречается в разделе FROM какого-либо оператора выборки, то вычисляется выражение запроса, указанное в разделе AS, и оператор выборки работает с результирующей таблицей этого выражения запроса.
Порождаемая таблица derived_table задается выражением запроса, заключенным в круглые скобки:
derived_table ::= (query_expression)
Агрегатные и кванторные функции
агрегатные:
Всё это функции над мультимножеством строк (сгруппированных, если GROUP BY, или всей таблицей). На осн. м/множества строк производятся множества значений
COUNT – количество значений
MAX
MIN
AVG – среднее значение
SUM
COUNT (*) – количество строк (всегда считаются различными)
--------------------
(аргументы следующих квантроных функций – СУТЬ логические выражения)
EVERY: true , если лог. выр. True для всех строк
SOME (ANY): true , если лог. выр. True для хотя бы одной строки
DISTINCT – удаление дубликатов строк из результата.
Если на входе пустое множество, то
СOUNT = 0 EVERY = true MAX, MIN, AVG, SUM = NULL
-
Предикаты языка SQL.
Логич. выражение – булево выражение, которое строится на основе предикатов с исп.операторов AND, OR, NOT И ()
S – скал.произведение
R – строк.табл
|R| - значение в строке
T – таблица
Предикат позволяет специфицировать усл-е, результатом которого может быть true, false или unknown.
Для любых аргументов предикатов правила:
-
совместимости типов
-
равенство степеней строк. операндов |Rx| = |Ry|
-
для люб. предик. есть обратный NOT pred = NOT (pred)
Предикаты:
-
Предикат сравнения: Rx comp-op Ry
-
Предикат between: условие вх-я в диап. Значений (Rx between Ry and Rz)
-
Предикат is null: является неопр.значением аргумента
-
Предикат in: условие вхождения в указ.множество
-
Предикат like: string LIKE pattern ESCAPE symbol
в pattern - любой одиноч.символ, % - произв. п/строка
-
Предикат similar
-
Предикат exists: получили ли пустую таблицу (TRUE | Трез |>0 , иначе FALSE)
-
Предикат unique: = TRUE, когда в Трез отсут. 2 одинак. стр
-
Предикат overlaps: пересечение по времени 2х событий
-
Предикат сравнения с квантором:
Rx comp_op ALL T (квантор всеобщности)
Rx comp_op SOME T (квантор существования)
-
Предикат match: соответствие подстроки рез-ту 2/л запросу
-
Предикат is distinct: Rx IS DISTINCT FROM Ry = TRUE Rx и Ry - дубликаты
-
Управление транзакциями в SQL. Средства инициации и завершения транзакций. Понятие точки сохранения. Уровни изоляции SQL-транзакций.
Транзакция ACID – послед. операций, обладающих св-вами атомарности, согласованности, изоляц, долговечн.
Транзакция , образованная явным образом: START TRANSACTION либо неявно, когда выполняется оператор, для которого требуется контекст транзакции, а его нет.
Для завершения транзакции: COMMIT (транзакция сохр-ся в БД)
ROLLBACK (система возвращается в сост-е до старта)
SET TRANSACTION mode_commalist
mode ::=isolation_level
| access_mode
| diagnostics_size
isolation_level ::= READ UNCOMMITED - уровень изоляции
| READ COMITTED
| REPEATABLE READ
| SERIALIZABLE
access_mode ::= READ ONLY - режим доступа
| READ WRITE
diagnostics_size ::= DIAGNOSTIC SIZE value_specification - № диап.элем-в, кот. могут размещаться в области диагностики
Точки сохранения.
Точка сохранения представляет собой своего рода пометку в последовательности операций транзакции, которую в дальнейшем можно использовать для частичного отката транзакции с сохранением жизнеспособности транзакции и результатов операций, выполненных в транзакции до точки сохранения.
Установления точки сохранения: SAVEPOINT savepoint_name
Уровни изоляции SQL-транзакции
В стандарте SQL:1999 уровни изоляции определяются на основе нескольких феноменов, которые могут возникать при выполнении транзакций:
-
Феномен «грязного» чтения (dirty read) - Этому феномену подвержены транзакции, в которых допускается возможность видеть изменения объектов базы данных, производимые другими одновременно выполняемыми и еще не зафиксированными транзакциями. В SQL феномен «грязного» чтения может наблюдаться у транзакций, выполняемых на уровне изоляции READ UNCOMMITTED
-
Феномен неповторяемого чтения (unrepeatable read) - Этому феномену подвержены транзакции, читающие некоторые объекты базы данных и допускающие изменения уже прочитанных объектов другими транзакциями. В SQL феномен неповторяемого чтения может наблюдаться у транзакций, выполняемых на уровне изоляции READ COMMITTED (этот уровень изоляции, как показывает его название, гарантирует отсутствие феномена «грязного» чтения).
-
Феномен фантомов - Этому феномену подвержены транзакции, производящие выборку строк и таблиц базы данных и допускающие добавление к данным таблицам другими транзакциями строк, которые удовлетворяют условию выборки. В SQL феномен фантомов может наблюдаться у транзакций, выполняемых на уровне изоляции REPEATABLE READ (этот уровень изоляции, как показывает его название, гарантирует отсутствие феномена неповторяемого чтения).
52. Иерархия видов ограничений целостности в SQL.
В стандарте SQL дополнительные ограничения базы данных называются ASSERTION, т.е. общие ограничения целостности (ограничения БД).
Для определения общего ограничения целостности служит оператор CREATE ASSERTION, задаваемый в следующем синтаксисе:
CREATE ASSERTION constraint_name
CHECK (conditional_expression)
Пример:
CREATE ASSERTION MIN_EMP_BDATE CHECK
((SELECT MIN(EMP_BDATE)) FROM EMP) >= '1917-10-24')
В контексте каждой выполняемой транзакции каждое ограничение целостности должно находиться в одном из двух режимов:
1) немедленной проверки (immediate): проверяются при выполнении в транзакции любой операции, изменяющей состояние базы данных, и, возможно ROLLBACK,
2) отложенной проверки (deferred): проверяются при завершении транзакции (выполнении операции COMMIT).
спецификация INITIALLY для ограничения целостности (любого вида):
INITIALLY { DEFERRED | IMMEDIATE } [ [ NOT ] DEFERRABLE ]
Подробнее:
INITIALLY IMMEDIATE - в режиме немедленной проверки,
INITIALLY DEFERRED – находиться в режиме отложенной проверки, а также DEFERRABLE - для данного ограничения м б установлен режим отложенной проверки, NOT DEFERRABLE – что не может,
INITIALLY DEFERRED NOT DEFERRABLE является недопустимой возможности смены режима подразумевается наличие спецификации DEFERRABLE.
53. Поддержка авторизации доступа к данным в SQL. Объекты и привилегии. Пользователи и роли.
1) Метод авторизации в SQL относится к мандатным методам.
2) В SQL – 9 типов привилегий + привилегия на передачу привилегий.
3) Поддерживается принцип сокрытия информации об объектах от субъектов, у которых нет доступа.
4) Субъекты в SQL – пользователи и роли. Роль соответствует динамически определенной группе, каждая из которых отражает привилегии на исполнение данной роли, а также всеми привилегиями данной роли для доступа к объектам БД
54. Передача и аннулирование привилегий и ролей в SQL.