Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Базы данных -> SQL -> Язык баз данных SQL со средствами поддержания целостности


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

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

Нет.

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



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.