6.4 <Раздел умолчания> (<default clause>)

Функция

Специфицирует умолчание для <определения столбца> (<column definition>).

Формат


     <default clause> ::=

                DEFAULT { <literal> | USER | NULL }

Синтаксические правила

  1. <Тип данных> (<data type>) объекта <раздела умолчания> (<default clause>) есть <тип данных> (<data type>) содержащего этот раздел <определения столбца> (<column definition>).

  2. a) Если указан <литерал> (<literal>), то:
    b) Если указано USER, то <тип данных> (<data type>) объекта должен быть типом символьных строк и <длина> (<lenght>) <типа данных> (<data type>) объекта должна быть больше или равна 18.
    c) Если указано NULL, то содержащее раздел умолчания <определение столбца> (<column definition>) не должно специфицировать NO NULL.

Общие правила

  1. Когда строка заносится в таблицу, специфицированную содержащим раздел умолчания <определением таблицы> (<table definition>), столбец, определенный через <определение столбца> (<column definition>), инициализируется следующим образом:
    a) Если <определение столбца> (<column definition>) не содержит <раздела умолчания> (<default clause>) или если явно или неявно определяется <раздел умолчания> (<default clause>), специфицирующий NULL, то столбец инициализируется неопределенным значением.
    b) Если <определение столбца> (<column definition>) содержит <раздел умолчания> (<default clause>), специфицирующий <литерал> (<literal>), то:
    c) Если <определение столбца> (<column definition>) включает <раздел умолчания> (<default clause>) со спецификацией USER, то столбец инициализируется значением, определяемым USER, расширенной символами пробела вправо до длины <типа данных> (<data type>) <определения столбца> (<column definition>).

6.5 <Определение ограничения на таблицу> (<table constraint definition>)

Функция

Специфицирует ограничение целостности.

Формат


     <table constraint definition> ::=

                  <unique constraint definition>

                | <referential constraint definition>

                | <check constraint definition>

Синтаксические правила

Нет.

Общие правила

  1. <Определение ограничения на таблицу> (<table constraint definition>) фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).

6.6 <Определение ограничения уникальности> (<unique constraint definition>)

Функция

Специфицирует ограничение уникальности для таблицы.

Формат


     <unique constraint definition> ::=

               <unique specification> (<unique column list>)

     <unique specification> ::=

               UNIQUE | PRIMARY KEY

     <unique column list> ::=

               <column name> [{,<column name>}...]

Синтаксические правила

  1. Пусть T обозначает таблицу, для которой определяется ограничение.
  2. Каждое <имя столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно идентифицировать столбец T, и один столбец не должен указываться более одного раза.
  3. В <определении столбца> (<column definition>) для каждого <имени столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно быть указано NO NULL.
  4. В <определении таблицы> (<table definition>) должно содержаться не более одного явного или неявного <определения ограничения уникальности> (<unique constraint definition>), специфицирующего PRIMARY KEY.

Общие правила

  1. Пусть термин "назначенные столбцы" обозначает столбцы, идентифицируемые <именами столбцов> (<column name>) в <списке столбцов уникальности> (<unique column list>).
  2. Ограничение уникальности обязывает T не содержать строк, назначенные столбцы которых образуют дубликаты. Две строки являются дубликатами, если значение каждого назначенного столбца в первой строке равно значению соответствующего столбца во второй строке. Ограничение фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).

6.7 <Определение ограничения на ссылки> (<referential constraint definition>)

Функция

Специфицирует ограничение на ссылки.

Формат


     <referential constraint definition> ::=

                FOREIGN KEY (<referencing columns>)

                <references specification>

     <references specification> ::=

                REFERENCES <referenced table and columns>

     <referencing columns> ::=

                <reference column list>

     <referenced table and columns> ::=

                <table name> [(<reference column list>)]

     <reference column list> ::=

                <column name> [{,<column name>}...]

Синтаксические правила

  1. Пусть термин "ссылающаяся таблица" обозначает таблицу, для которой определяется ограничение. Пусть термин "ссылаемая таблица" обозначает таблицу, идентифицируемую <именем таблицы> (<table name>) в <ссылаемых таблице и столбцах> (<referenced table and columns>). Пусть термин "ссылающиеся столбцы" обозначает столбцы, идентифицируемые <списком столбцов ссылки> (<reference column list>) в <ссылающихся столбцах> (<referencing columns>).

  2. 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>).
  3. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать REFERENCES для каждого ссылаемого столбца.
    Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)".
  4. Ссылаемая таблица должна являться базовой таблицей.
  5. Каждый ссылающийся столбец должен идентифицировать столбец ссылающейся таблицы, и одно и то же имя столбца не должно указываться более одного раза. Каждый ссылаемый столбец должен идентифицировать столбец ссылаемой таблицы, и одно и то же имя столбца не должно указываться более одного раза.
  6. <Ссылающиеся столбцы> должны содержать то же число имен столбцов, что и <ссылаемые таблица и столбцы> (<referenced table and columns>). I-ый столбец, идентифицируемый в <ссылающихся столбцах> (<referencing columns>), соответствует i-ому столбцу, идентифицируемому в <ссылаемых таблице и столбцах> (<referenced table and columns>). Тип данных каждого ссылающегося столбца должен быть таким же, как и тип данных соответствующего ссылаемого столбца.

Общие правила

  1. Ссылающаяся таблица и ссылаемая таблица удовлетворяют <определению ограничения на ссылки> (<referential constraint definition>) в том и только в том случае, когда для каждой строки ссылающейся таблицы либо:
    a) Все ссылающиеся столбцы в строке содержат не неопределенные значения и существует строка в ссылаемой таблице такая, что для каждого ссылающегося столбца значение ссылающегося столбца равно значению соответствующего ссылаемого столбца, либо
    b) Какой-либо ссылающийся столбец в строке содержит неопределенное значение.

6.8 <Определение проверочного ограничения> (<check constraint definition>)

Функция

Специфицирует условие для таблицы.

Формат


     <check constraint definition> ::=

               CHECK (<search condition>)

Синтаксические правила

  1. <Условие поиска> (<search condition>) не должно содержать <подзапроса> (<subquery>), <спецификации функции над множеством> (<set function specification>) или <спецификации цели> (<target specification>).
  2. Каждая <спецификация столбца> (<column specification>) в <условии поиска> (<search condition>) должна ссылаться на столбец, определенный в содержащем <определении таблицы> (<table definition>).

Общие правила

  1. База данных не удовлетворяет <определению проверочного ограничения> (<check constraint definition>) в том и только в том случае, когда таблица, определенная через содержащее <определение таблицы> (<table definition>), содержит строку, для которой <условие поиска> (<search condition>) есть false.

6.9 <Определение представления> (<view definition>)

Функция

Определяет представляемую таблицу.

Формат


     <view definition> ::=

               CREATE VIEW <table name> [(<view column list>)]

               AS <query specification>

               [WITH CHECK OPTION]

     <view column list> ::=

               <column name> [{,<column name>}...]

Синтаксические правила

  1. Если <имя таблицы> (<table name>) содержит <идентификатор полномочий> (<authorization identifier>), то этот <идентификатор полномочий> (<authorization identifier>) должен быть таким же, как и <идентификатор полномочий схемы> (<schema authorization identifier>) содержащей <схемы> (<schema>).
  2. <Имя таблицы> (<table name>) должно быть отличным от <имени таблицы> (<table name>) любого другого <определения представления> (<view definition>) или <определения таблицы> (<table definition>) в содержащей <схеме> (<schema>).
  3. Если <спецификация запроса> (<query specification>) является изменяемой (updatable), то представляемая таблица является изменяемой таблицей. В противном случае это только читаемая таблица.
  4. Если какие-либо два столбца в таблице, определяемой <спецификацией запроса> (<query specification>), имеют одно и то же <имя столбца> (<column name>) или если какой-либо столбец этой таблицы является неименованным столбцом, то должен быть указан <список столбцов представления> (<view column list>).
  5. Одно <имя столбца> (<column name>) не должно указываться более одного раза в <списке столбцов представления> (<view column list>).
  6. Число <имен столбцов> (<column name>) в <списке столбцов представления> (<view column list>) должно быть таким же, что и степень таблицы, определяемой <спецификацией запроса> (<query specification>).
  7. Описание таблицы, определенной через <определение представления> (<view definition>), включает имя <имя таблицы> (<table name>) и описания столбцов таблицы, специфицированной через <спецификацию запроса> (<query specification>). Если указывается <список столбцов представления> (<view column list>), то имя i-ого столбца есть i-ое <имя столбца> (<column name>) в этом <списке столбцов представления> (<view column list>).
  8. Если <спецификация запроса> (<query specification>) содержит <раздел group by> (<group by clause>) или <раздел having> (<having clause>), не содержащиеся в <подзапросе> (<subquery>), то представляемая таблица, определенная через данное <определение представления> (<view definition>), является сгруппированной таблицей.
  9. Если указано WITH CHECK OPTION, то представляемая таблица должна быть изменяемой (updatable).

Общие правила

  1. <Определение представления> (<view definition>) определяет представляемую таблицу. Представляемая таблица V - это таблица, которая явилась бы результатом выполнения <спецификации запроса> (<query specification>). Является ли представляемая таблица материализованной определяется в реализации.
  2. Если V - изменяемая (updatable) таблица, то пусть T обозначает таблицу, идентифицируемую <именем таблицы> (<table name>), которое указано в первом <разделе from> (<from clause>) в <спецификации запроса> (<query specification>). Для каждой строки в V существует соответствующая строка в T, из которой получается эта строка V. Для каждого столбца в V существует соответствующий столбец в T, из которого получается этот столбец V. Занесение строки в V является занесением соответствующей строки в T. Удаление строки из V является удалением соответствующей строки из T. Модификация столбца строки в V является модификацией соответствующей строки в T.

  3. 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>)".

6.10 <Определение привилегий> (<privilege definition>)

Функция

Определяет привилегии.

Формат


     <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>

Синтаксические правила

  1. Пусть T обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). <Привилегии> (<privileges>) определяют одну или более привилегий на T.
  2. UPDATE (<grant column list>) специфицирует привилегию UPDATE для каждого столбца T, указанного в <списке разрешаемых столбцов> (<grant column list>). Каждое <имя столбца> (<column name>) в <списке разрешаемых столбцов> (<grant column list>) должно идентифицировать столбец T. Если <список разрешаемых столбцов> (<grant column list>) опущен, то UPDATE специфицирует привилегию UPDATE для всех столбцов T.
  3. REFERENCES (<grant column list>) специфицирует привилегию REFERENCES для каждого столбца T, указанного в <списке разрешаемых столбцов> (<grant column list>). Каждое <имя столбца> (<column name>) в <списке разрешаемых столбцов> (<grant column list>) должно идентифицировать столбец T. Если <список разрешаемых столбцов> (<grant column list>) опущен, то REFERENCES специфицирует привилегию REFERENCES для всех столбцов T.
  4. Применимые <привилегии> (<privileges>) для ссылки на <имя таблицы> (<table name>) определяются следующим образом:
    a)
    b)
  5. ALL эквивалентно списку <действий> (<action>), включающему все применимые <привилегии> (<privileges>) на данном <имени таблицы> (<table name>).
  6. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) из <определения привилегий> (<provileges definition>) должны включать <привилегии> (<privileges>), указанные в <определении привилегий> (<privileges definition>).

Общие правила

Нет.

Назад | Содержание | Вперед