Мартин Грубер - Понимание SQL (991940), страница 53
Текст из файла (страница 53)
Сначала Вы используете реализационно-зависимую процедуру, чтобы архивировать текущее содержание вашей базы данных, поэтому копия ее содержания гденибудь будет сохранена. Затем вы просматриваете протокол изменений сделанных вбазе данных.
Он сохраняется в некоторой области памяти, но не в главной памяти базы данных а желательно на отдельном устройстве, и содержит список всех командкоторые произвели изменения в структуре или в содержании базы данных. Если у васвдруг появились проблемы и текущее содержание вашей базы данных оказалось нарушенным, вы можете повторно выполнить все изменения зарегистрированные в протоколе на резервной копии вашей базы данных, и снова привести вашу базу данных всостояние, которое было до момента последней записи в протокол. Типичной командой, чтобы начать протоколирование, будет следующая:SET JOURNAL ON;Auditing используется c целью защиты.
Она следит за тем, кто и какие действиявыполнял в базе данных, и сохраняет эту информацию в таблице, доступной толькоочень немногим высоко привилегированным пользователям. Конечно, вы редко будете прибегать к процедуре ревизии, потому что очень скоро она займет много памяти ивам будет сложно работать в вашей базе данных. Но вы можете устанавливать ревизию для определенных пользователей, определенных действий или определенныхобъектов данных.
Имеется такая форма команды AUDIT:AUDIT INSERT ON Salespeople BY Diane;Или предложение ON, или предложение BY могут быть исключены, устанавливая ревизию либо всех объектов, или всех пользователей, соответственно. Применение AUDIT ALL, вместо AUDIT INSERT, приведет к отслеживанию всех действий Dianeв таблице Продавцов.ПриложениеDСПРАВОЧНИК ПОКОМАНДАМ ИСИНТАКСИСУЭТО ПРИЛОЖЕНИЕ СОДЕРЖИТ БОЛЕЕ КРАТКОЕ описание различных командSQL.
Цель состоит в том, чтобы дать вам быструю и точную ссылку и определениеSQL. Первый раздел этого приложения определяет элементы, используемые для создания команд SQL; второй, подробности синтаксиса и предложения с кратким описанием самих команд. Далее показаны стандартные условные обозначения (ониназываются BNF условиями):* Ключевые cлова набираются в верхнем регистре.* SQL и другие специальные условия заключаются в угловые скобки и набираются курсивом (<and>).* Необязательные части команд находятся в квадратных скобках ([and]).* Многоточие (....) указывает на то, что предшествующая часть команды можетповторяться любое число раз.* Вертикальная полоса (|) означает что то, что ей предшествует, может быть заменено на то, что следует за ней.* Фигурные Скобки ({and}) указывают — все что внутри них, должно быть расценено как целое, для оценки других символов (например, вертикальных полос или эллипсов).* Двойное двоеточие и равняется (::=) означают что то, что следует за ними, является определением того, что им предшествует.Кроме того, мы будем использовать следующую последовательность (.,..) чтобыуказывать, что предшествующее этому может повторяться любое число раз с индивидуальными событиями отделяемыми запятыми.
Атрибуты, которые не являются частью официального стандарта, будут отмечены как (*нестандартные*) в описании.ОБРАТИТЕ ВНИМАНИЕ: Терминология которую мы используем здесь, не официальная терминология ANSI. Официальная терминология может вас сильнозапутать, поэтому мы несколько ее упростили.По этой причине мы иногда используем условия, отличающиеся от ANSI, или используем те же самые условия, но несколько по-другому. Например, наше определение <predicate> отличается от используемой в ANSI комбинации стандартногоопределения <predicate> с <search condition>.SQL ЭЛЕМЕНТЫЭтот раздел определяет элементы команд SQL.
Они разделены на две категории: Основные элементы языка и Функциональные элементы языка.Основные элементы — это создаваемые блоки языка; когда SQL исследует команду, то он сначала оценивает каждый символ в тексте команды в терминах этихэлементов. Разделители <separator> отделяют одну часть команды от другой; все чтонаходится между разделителями <separator> обрабатывается как модуль. Основываясь на этом разделении, SQL и интерпретирует команду.Функциональные элементы — это разнообразные вещи, отличающиеся от ключевых слов, которые могут интерпретироваться как модули. Это — части команды, отделяемые с помощью разделителей <separator>, имеющих специальное значение вSQL.
Некоторые из них являются специальными для определенных команд и будутописаны вместе с этими командами позже, в этом приложении. Перечисленное здесь,является общими элементы для всех описываемых команд. Функциональные элементы могут определяться в терминах друг друга или даже в собственных терминах. Например, предикат <predicate>, наш последний и наиболее сложный случай, содержитпредикат <predicate> внутри собственного определения. Это потому, что предикат<predicate> использующий AND или OR может содержать любое число предикатов<predicate> которые могут работать автономно.Мы представляли вам предикат <predicate> в отдельной секции в этом приложении из-за разнообразия и сложности этого функционального элемента языка.
Он будет постоянно присутствовать при обсуждении других функциональных частейкоманд.БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКАЭЛЕМЕНТ<separator><comment><space><newline><identifier>ОПРЕДЕЛЕНИЕ<comment> | <space> | <newline>--<string> <newline>пробелреализационно-определяемый конец символьной строки<letter>[{<letter or digit> | <underscore>}... ]ИМЕЙТЕ ВВИДУ: Следуя строгому стандарту ANSI, символы должны быть набраны вверхнем регистре, а индификатор <identifier> не должен быть длиннее 18-ти символов.<underscore><percent sign><delimiter><string>%любое из следующих: , ( ) < > . : = + " - | <> > = < = или <string>[любой печатаемый текст в одиночных кавычках]Примечание: В <string>, две последовательных одиночных кавычки ('') интерпретируются как одна (').<SQL term>окончание, зависящее от главного языка.
(*только вложеный*)ФУНКЦИОНАЛЬНЫЕ ЭЛЕМЕНТЫСледующая таблица показывает функциональные элементы команд SQL и ихопределения:ЭЛЕМЕНТ<query><subquery><value expression><operator><primary><literal><built-in constant><table name><column spec><grouping column><ordering column><colconstraint>ОПРЕДЕЛЕНИЕПредложение SELECTЗаключеное в круглых скобках предложение SELECT внутри другого условия, которое, фактически, оценивается отдельно для каждой строки-кандидата другого предложения.<primary> | <primary> <operator> <primary> | <primary> <operator><value expression>любое из следующих: + - / *<column name> | <literal> | <aggregate function> | <built-in constant>| <nonstandard function><string> | <mathematical expression>USER | <implementation-defined constant><identifier>[<table name> | <alias>]<column name><column spec> | <integer><column spec> | <integer>NOT NULL | UNIQUE | CHECK (<predicate>) | PRIMARY KEY |REFERENCES <table name>[(<column name>)]<tabconstraint><defvalue><data type><size><cursor name><index name><synonym><owner><column list><value list><table reference>UNIQUE (<column list>) | CHECK (<predicate>) | PRIMARY KEY(<column list>) | FOREIGN KEY (<column list>) REFERENCES <tablename>[(<column list>)]ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ = <value expression>Допустимый тип данных (См.
Приложение B для описания типовобеспечиваемых ANSI или Приложение C для других общих типов.)Значение зависит от <data type> (См. Приложение B.)<identifier><identifier><identifier> (*nonstandard*)<Authorization ID><column spec> .,..<value expression> .,..{ <table name> [<alias>] } .,..ПРЕДИКАТЫСледующее определяет список различных типов предиката <predicate> описаных на следующих страницах:<predicate> ::= [NOT]{ <comparison predicate> | <in predicate> | <nullpredicate> | <between predicate> | <like predicate> | <quantifiedpredicate> | <exists predicate> } [AND | OR <predicate>]<predicate> — это выражение, которое может быть верным, неверным или неизвестным, за исключением <exists predicate> и <null predicate>, которые могут бытьтолько верными или неверными.Будет получено неизвестно если NULL значения предотвращают вывод полученного ответа.