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

Функция

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

Формат

     <default clause> ::=
                DEFAULT { <literal> | USER | NULL }

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

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

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

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

  1. Когда строка заносится в таблицу, специфицированную содержащим раздел умолчания <определением таблицы> (<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> ::=
                  <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)

      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>), то:
      1. Если T - базовая таблица, то применимыми <привилегиями> (<privileges>) являются INSERT, SELECT, UPDATE, DELETE и REFERENCES, и эти <привилегии> (<privileges>) могут передаваться.
      2. Если T - представляемая таблица и не является изменяемой (updatable), то применимой <привилегией> (<privilege>) является SELECT, и эта привилегия может передаваться тогда и только тогда, когда могут передаваться применимые привилегии SELECT ко всем <именам таблиц>, содержащимся в <спецификации запроса> (<query specification>).
      3. Если 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>).
  5. ALL эквивалентно списку <действий> (<action>), включающему все применимые <привилегии> (<privileges>) на данном <имени таблицы> (<table name>).
  6. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) из <определения привилегий> (<provileges definition>) должны включать <привилегии> (<privileges>), указанные в <определении привилегий> (<privileges definition>).

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

Нет.

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


Copyright © CIT