<Тип данных> (<data type>)
объекта <раздела умолчания>
(<default clause>) есть <тип
данных> (<data type>)
содержащего этот раздел
<определения столбца> (<column
definition>).
a) Если указан <литерал>
(<literal>), то:
i) Если <тип данных> (<data
type>) объекта есть тип
символьных строк, то
<литерал> (<literal>)
должен быть <литералом
символьной строки>
(<character string literal>). Длина
<литерала символьной
строки> (<character string
literal>) не должна быть
больше, чем <длина>
(<lenght>) <типа данных>
(<data type>) объекта.
ii) Если <тип данных>
(<data type>) объекта есть
тип точных чисел, то
<литерал> (<literal>)
должен быть <литералом
точного числа> (<exact numeric
literal>) и должно
существовать
представление значения
<литерала точного
числа> (<exact numeric literal>) в
<типе данных> (<data type>)
объекта, в котором не
теряются никакие значащие
цифры.
iii) Если <тип данных>
(<data type>) объекта есть
тип приблизительных чисел,
то литерал должен быть
<литералом
приблизительного числа>
(<approximate numeric literal>) или
<литералом точного
числа> (<exact numeric literal>).
b) Если указано USER, то <тип
данных> (<data type>) объекта
должен быть типом символьных
строк и <длина> (<lenght>)
<типа данных> (<data type>)
объекта должна быть больше или
равна 18.
c) Если указано NULL, то
содержащее раздел умолчания
<определение столбца> (<column
definition>) не должно
специфицировать NO NULL.
Общие правила
Когда строка заносится в
таблицу, специфицированную
содержащим раздел умолчания
<определением таблицы>
(<table definition>), столбец,
определенный через
<определение столбца> (<column
definition>), инициализируется
следующим образом:
a) Если <определение столбца>
(<column definition>) не содержит
<раздела умолчания> (<default
clause>) или если явно или неявно
определяется <раздел
умолчания> (<default clause>),
специфицирующий NULL, то столбец
инициализируется
неопределенным значением.
b) Если <определение столбца>
(<column definition>) содержит
<раздел умолчания> (<default
clause>), специфицирующий
<литерал> (<literal>), то:
i) Если <тип данных> (<data
type>) <определения
столбца> (<column definition>)
есть тип точных или
приблизительных чисел, то
столбец инициализируется
численным значением
<литерала> (<literal>).
ii) Если <тип данных>
(<data type>) <определения
столбца> (<column definition>)
есть тип данных символьных
строк с длиной, равной
длине <литерала>
(<literal>), то столбец
инициализируется
значением этого
<литерала> (<literal>).
iii) Если <тип данных>
(<data type>) <определения
столбца> (<column definition>)
есть тип символьных строк
с длиной большей, чем длина
<литерала> (<literal>), то
столбец инициализируется
значением <литерала>
(<literal>), расширенным при
необходимости символами
пробела вправо до длины
<типа данных> (<data
type>).
c) Если <определение столбца>
(<column definition>) включает
<раздел умолчания> (<default
clause>) со спецификацией USER, то
столбец инициализируется
значением, определяемым USER,
расширенной символами пробела
вправо до длины <типа
данных> (<data type>)
<определения столбца> (<column
definition>).
6.5 <Определение ограничения на
таблицу> (<table constraint definition>)
<Определение ограничения на
таблицу> (<table constraint definition>)
фактически проверяется после
выполнения каждого
<оператора SQL> (<SQL statement>).
Пусть T обозначает таблицу, для
которой определяется
ограничение.
Каждое <имя столбца> (<column
name>) в <списке столбцов
уникальности> (<unique column list>)
должно идентифицировать
столбец T, и один столбец не
должен указываться более
одного раза.
В <определении столбца>
(<column definition>) для каждого
<имени столбца> (<column name>)
в <списке столбцов
уникальности> (<unique column list>)
должно быть указано NO NULL.
В <определении таблицы>
(<table definition>) должно
содержаться не более одного
явного или неявного
<определения ограничения
уникальности> (<unique constraint
definition>), специфицирующего PRIMARY
KEY.
Общие правила
Пусть термин "назначенные
столбцы" обозначает столбцы,
идентифицируемые <именами
столбцов> (<column name>) в
<списке столбцов
уникальности> (<unique column
list>).
Ограничение уникальности
обязывает T не содержать строк,
назначенные столбцы которых
образуют дубликаты. Две строки
являются дубликатами, если
значение каждого назначенного
столбца в первой строке равно
значению соответствующего
столбца во второй строке.
Ограничение фактически
проверяется после выполнения
каждого <оператора SQL> (<SQL
statement>).
6.7 <Определение ограничения на
ссылки> (<referential constraint definition>)
Пусть термин "ссылающаяся
таблица" обозначает таблицу,
для которой определяется
ограничение. Пусть термин
"ссылаемая таблица"
обозначает таблицу,
идентифицируемую <именем
таблицы> (<table name>) в
<ссылаемых таблице и
столбцах> (<referenced table and
columns>). Пусть термин
"ссылающиеся столбцы"
обозначает столбцы,
идентифицируемые <списком
столбцов ссылки> (<reference column
list>) в <ссылающихся
столбцах> (<referencing columns>).
a) Если в <ссылаемых таблице и
столбцах> (<referenced table and
columns>) указывается <имя
столбца> (<column name>) или
<список столбцов ссылки>
(<reference column list>), то эти <имя
столбца> (<column name>) или
<список столбцов ссылки>
(<reference column list>) должны быть
идентичны <списку столбцов
уникальности> (<unique column list>)
в <определении ограничения
уникальности> (<unique constraint
definition>) ссылочной таблицы.
Пусть термин "ссылаемые
столбцы" обозначает столбцы,
идентифицируемые этими
<именем столбца> (<column name>)
или <списком столбцов
ссылки> (<reference column list>).
b) Если в <ссылаемых таблице и
столбцах> (<referenced table and
columns>) не указывается <имя
столбца> (<column name>) или
<список столбцов ссылки>
(<reference column list>), то
<определение таблицы> (<table
definition>) для ссылаемой таблицы
должно содержать
<определение ограничения
уникальности> (<unique constraint
definition>), специфицирующее PRIMARY
KEY. Пусть термин "ссылаемые
столбцы" обозначает столбцы,
идентифицируемые <списком
столбцов уникальности> (<unique
column list>) в этом <определении
ограничения уникальности>
(<unique constraint definition>).
Применимые <привилегии>
(<privileges>) для <имени
таблицы> (<table name>) должны
включать REFERENCES для каждого
ссылаемого столбца. Замечание: "Применимые
<привилегии> (<privileges>)"
для <имени таблицы> (<table
name>) определяются в 6.10,
"<определение привилегий>
(<privileges definition>)".
Ссылаемая таблица должна
являться базовой таблицей.
Каждый ссылающийся столбец
должен идентифицировать
столбец ссылающейся таблицы, и
одно и то же имя столбца не
должно указываться более
одного раза. Каждый ссылаемый
столбец должен
идентифицировать столбец
ссылаемой таблицы, и одно и то
же имя столбца не должно
указываться более одного раза.
<Ссылающиеся столбцы>
должны содержать то же число
имен столбцов, что и
<ссылаемые таблица и
столбцы> (<referenced table and
columns>). I-ый столбец,
идентифицируемый в
<ссылающихся столбцах>
(<referencing columns>), соответствует
i-ому столбцу,
идентифицируемому в
<ссылаемых таблице и
столбцах> (<referenced table and
columns>). Тип данных каждого
ссылающегося столбца должен
быть таким же, как и тип данных
соответствующего ссылаемого
столбца.
Общие правила
Ссылающаяся таблица и
ссылаемая таблица
удовлетворяют <определению
ограничения на ссылки>
(<referential constraint definition>) в том и
только в том случае, когда для
каждой строки ссылающейся
таблицы либо:
a) Все ссылающиеся столбцы в
строке содержат не
неопределенные значения и
существует строка в ссылаемой
таблице такая, что для каждого
ссылающегося столбца значение
ссылающегося столбца равно
значению соответствующего
ссылаемого столбца, либо
b) Какой-либо ссылающийся
столбец в строке содержит
неопределенное значение.
<Условие поиска> (<search
condition>) не должно содержать
<подзапроса> (<subquery>),
<спецификации функции над
множеством> (<set function
specification>) или <спецификации
цели> (<target specification>).
Каждая <спецификация
столбца> (<column specification>) в
<условии поиска> (<search
condition>) должна ссылаться на
столбец, определенный в
содержащем <определении
таблицы> (<table definition>).
Общие правила
База данных не удовлетворяет
<определению проверочного
ограничения> (<check constraint
definition>) в том и только в том
случае, когда таблица,
определенная через содержащее
<определение таблицы> (<table
definition>), содержит строку, для
которой <условие поиска>
(<search condition>) есть false.
Если <имя таблицы> (<table
name>) содержит <идентификатор
полномочий> (<authorization
identifier>), то этот
<идентификатор полномочий>
(<authorization identifier>) должен быть
таким же, как и <идентификатор
полномочий схемы> (<schema
authorization identifier>) содержащей
<схемы> (<schema>).
<Имя таблицы> (<table name>)
должно быть отличным от
<имени таблицы> (<table name>)
любого другого <определения
представления> (<view definition>)
или <определения таблицы>
(<table definition>) в содержащей
<схеме> (<schema>).
Если <спецификация запроса>
(<query specification>) является
изменяемой (updatable), то
представляемая таблица
является изменяемой таблицей.
В противном случае это только
читаемая таблица.
Если какие-либо два столбца в
таблице, определяемой
<спецификацией запроса>
(<query specification>), имеют одно и
то же <имя столбца> (<column
name>) или если какой-либо
столбец этой таблицы является
неименованным столбцом, то
должен быть указан <список
столбцов представления> (<view
column list>).
Одно <имя столбца> (<column
name>) не должно указываться
более одного раза в <списке
столбцов представления> (<view
column list>).
Число <имен столбцов> (<column
name>) в <списке столбцов
представления> (<view column list>)
должно быть таким же, что и
степень таблицы, определяемой
<спецификацией запроса>
(<query specification>).
Описание таблицы, определенной
через <определение
представления> (<view definition>),
включает имя <имя таблицы>
(<table name>) и описания столбцов
таблицы, специфицированной
через <спецификацию
запроса> (<query specification>).
Если указывается <список
столбцов представления> (<view
column list>), то имя i-ого столбца
есть i-ое <имя столбца> (<column
name>) в этом <списке столбцов
представления> (<view column
list>).
Если <спецификация запроса>
(<query specification>) содержит
<раздел group by> (<group by clause>)
или <раздел having> (<having
clause>), не содержащиеся в
<подзапросе> (<subquery>), то
представляемая таблица,
определенная через данное
<определение представления>
(<view definition>), является
сгруппированной таблицей.
Если указано WITH CHECK OPTION, то
представляемая таблица должна
быть изменяемой (updatable).
Общие правила
<Определение представления>
(<view definition>) определяет
представляемую таблицу.
Представляемая таблица V - это
таблица, которая явилась бы
результатом выполнения
<спецификации запроса>
(<query specification>). Является ли
представляемая таблица
материализованной
определяется в реализации.
Если V - изменяемая (updatable)
таблица, то пусть T обозначает
таблицу, идентифицируемую
<именем таблицы> (<table name>),
которое указано в первом
<разделе from> (<from clause>) в
<спецификации запроса>
(<query specification>). Для каждой
строки в V существует
соответствующая строка в T, из
которой получается эта строка
V. Для каждого столбца в V
существует соответствующий
столбец в T, из которого
получается этот столбец V.
Занесение строки в V является
занесением соответствующей
строки в T. Удаление строки из V
является удалением
соответствующей строки из T.
Модификация столбца строки в V
является модификацией
соответствующей строки в T.
a) Если указано WITH CHECK OPTION, и
<спецификация запроса>
(<query specification>) содержит
<раздел where> (<where clause>), то
применение к представлению
<оператора вставки> (<insert
statement>), <оператора
модификации: позиционного>
(<update statement: positioned>) или
<оператора модификации:
поискового> (<update statement:
searched>) не должно приводить к
созданию строки, для которой
результат этого <раздела
where> (<where clause>) есть false.
b) Если WITH CHECK OPTION не указано, то
<определение представления>
(<view definition>) не должно
ограничивать значения данных,
которые могут быть занесены в
изменяемую (updatable)
представляемую таблицу. Замечание: См. Общее
правило 2 в 8.7,
"<Оператор вставки> (<insert
statement>)", Общее правило 5 в 8.11,
"<Оператор модификации:
позиционный> (<update statement:
positioned>)" и Общее правило 4 в 8.12,
"<Оператор модификации:
поисковый> (<update statement:
searched>)".
<privilege definition> ::=
GRANT <privileges> ON <table name>
TO <grantee> [{,<grantee>}...]
[WITH GRANT OPTION]
<privileges> ::=
ALL PRIVILEGES
| <action> [{,<action>}...]
<action> ::=
SELECT | INSERT | DELETE
| UPDATE [(<grant column list>)]
| REFERENCES [(<grant column list>]
<grant column list> ::=
<column name> [{,<column name>}...]
<grantee> ::=
PUBLIC | <authorization identifier>
Синтаксические правила
Пусть T обозначает таблицу,
идентифицируемую <именем
таблицы> (<table name>).
<Привилегии> (<privileges>)
определяют одну или более
привилегий на T.
UPDATE (<grant column list>)
специфицирует привилегию UPDATE
для каждого столбца T,
указанного в <списке
разрешаемых столбцов> (<grant
column list>). Каждое <имя
столбца> (<column name>) в
<списке разрешаемых
столбцов> (<grant column list>)
должно идентифицировать
столбец T. Если <список
разрешаемых столбцов> (<grant
column list>) опущен, то UPDATE
специфицирует привилегию UPDATE
для всех столбцов T.
REFERENCES (<grant column list>)
специфицирует привилегию
REFERENCES для каждого столбца T,
указанного в <списке
разрешаемых столбцов> (<grant
column list>). Каждое <имя
столбца> (<column name>) в
<списке разрешаемых
столбцов> (<grant column list>)
должно идентифицировать
столбец T. Если <список
разрешаемых столбцов> (<grant
column list>) опущен, то REFERENCES
специфицирует привилегию
REFERENCES для всех столбцов T.
Применимые <привилегии>
(<privileges>) для ссылки на <имя
таблицы> (<table name>)
определяются следующим
образом:
a)
i) Если вхождение <имени
таблицы> (<table name>)
содержится в <схеме>
(<schema>), то пусть
применимым
<идентификатором
полномочий> (<authorization
identifier>) будет
<идентификатор
полномочий> (<authorization
identifier>), указанный как
<идентификатор
полномочий схемы> (<schema
authorization identifier>) этой
<схемы> (<schema>).
ii) Если вхождение <имени
таблицы> (<table name>)
содержится в <модуле>
(<module>), то пусть
применимым
<идентификатором
полномочий> (<authorization
identifier>) будет
<идентификатор
полномочий> (<authorization
identifier>), указанный как
<идентификатор
полномочий модуля> (<module
authorization identifier>) этого
<модуля> (<module>).
b)
i) Если применимый
<идентификатор
полномочий> (<authorization
identifier>) является таким же,
как <идентификатор
полномочий> (<authorization
identifier>), явно или неявно
специфицированный в
<имени таблицы> (<table
name>), то:
Если T - базовая
таблица, то
применимыми
<привилегиями>
(<privileges>) являются
INSERT, SELECT, UPDATE, DELETE и
REFERENCES, и эти
<привилегии>
(<privileges>) могут
передаваться.
Если T - представляемая
таблица и не является
изменяемой (updatable), то
применимой
<привилегией>
(<privilege>) является
SELECT, и эта привилегия
может передаваться
тогда и только тогда,
когда могут
передаваться
применимые привилегии
SELECT ко всем <именам
таблиц>,
содержащимся в
<спецификации
запроса> (<query
specification>).
Если T - изменяемая
(updatable) представляемая
таблица, то
применимыми на T
<привилегиями>
(<privileges>) являются
все <привилегии>
(<privileges>) (кроме
REFERENCES), применимые на
<имени таблицы>
(<table name>) T2,
указанном в <разделе
from> (<from clause>)
<спецификации
запроса> (<query
specification>). Привилегия
является передаваемой
на T в том и только в
том случае, когда она
является передаваемой
на T2.
ii) Если применимый
<идентификатор
полномочий> (<authorization
identifier>) не является таким
же, как <идентификатор
полномочий> (<authorization
identifier>), явно или неявно
специфицированный в
<имени таблицы> (<table
name>), то применимые
<определения
привилегий> (<privileges
definition>) включают все
<определения
привилегий> (<privileges
definition>), для которых <имя
таблицы> (<table name>)
такое же, как данное <имя
таблицы> (<table name>), и
для которых
<получающие> (<grantee>)
либо включают применимый
<идентификатор
полномочий> (<authorization
identifier>), либо включают
PUBLIC, и применимые
<привилегии> (<privileges>)
содержат все привилегии,
специфицированные в
применимых <определениях
привилегий> (<privileges
definition>). Привилегия
является передаваемой в
том и только в том случае,
когда она указана в числе
<привилегий> (<privileges>)
некоторого применимого
<определения
привилегии> (<privilege
definition>), в котором указано
WITH GRANT OPTION и указан
применимый
<идентификатор
полномочий> (<authorization
identifier>).
ALL эквивалентно списку
<действий> (<action>),
включающему все применимые
<привилегии> (<privileges>) на
данном <имени таблицы> (<table
name>).
Применимые <привилегии>
(<privileges>) для <имени
таблицы> (<table name>) из
<определения привилегий>
(<provileges definition>) должны
включать <привилегии>
(<privileges>), указанные в
<определении привилегий>
(<privileges definition>).
Знаете ли Вы, что только в 1990-х доплеровские измерения радиотелескопами показали скорость Маринова для CMB (космического микроволнового излучения), которую он открыл в 1974. Естественно, о Маринове никто не хотел вспоминать. Подробнее читайте в FAQ по эфирной физике.