Введение в стандарты языка баз данных SQL

       

Оператор изменения схемы таблицы


Оператор изменения схемы таблицы (ALTERTABLE), для которого не было аналогов в стандарте SQL/89, предназначен для изменений в начальном определении таблицы. Оператор имеет следующий синтаксис:

<alter table statement> ::= ALTER TABLE <table name> <alter table action> <alter table action> ::= <add column definition> |<alter column definition> |<drop column definition> |<add table constraint definition> |<drop table constraint definition>

Пояснения:

  • Можно изменять схему любой базовой таблицы за исключением объявляемой локальной временной таблицы.
  • Определение добавления столбца позволяет добавить к таблице новый столбец. Конструкция имеет следующий синтаксис:

    <add column definition> ::= ADD [ COLUMN ] <column definition>

    Пояснения:

  • Каждое значение, содержащееся в столбце после его добавления к таблице, есть значение этого столбца по умолчанию.
  • Спецификация определения столбца в операторе ALTERTABLE имеет то же действие, что спецификация определения столбца в определении таблицы. В частности, степень таблицы увеличивается на единицу, и порядковый номер добавляемого столбца устанавливается равным новой степени таблицы.
  • Определение изменения столбца позволяет установить или отменить значение этого столбца по умолчанию. Конструкция имеет следующий синтаксис:

    <alter column definition> ::= ALTER [ COLUMN ] <column name> <alter column action> <alter column action> ::= <set column default clause> |<drop column default clause> <set column default clause> ::= SET <default clause> <drop column default clause> ::= DROP DEFAULT

    Пояснения:

  • В результате выполнения спецификации описатель существующего столбца таблицы изменяется в соответствии с указанным действием.
  • Если указано DROPDEFAULT, соответствующий столбец должен иметь значение по умолчанию.
  • Определение удаления столбца позволяет ликвидировать указанный столбец таблицы. Конструкция имеет следующий синтаксис:


    <drop column definition> ::= DROP [ COLUMN ] <column name> <drop behavior> <drop behavior> ::= CASCADE | RESTRICT

    Пояснения:

  • Если в определении удаления столбца указано RESTRICT, то на удаляемый столбец не должно быть ссылок в выражении запроса любого существующего представления и в условии поиска любого существующего ограничения, кроме табличных ограничений, ссылающихся только на этот столбец и входящих в описание данной таблицы.
  • Если в определении удаления столбца указано CASCADE, то любой зависимый объект уничтожается при выполнении неявного оператора REVOKE (см. ниже).
  • Пусть A обозначает текущий идентификатор авторизации. Пусть T - имя таблицы, для которой выполняется оператор ALTERTABLE, а C - имя удаляемого столбца. Тогда при удалении столбца неявно выполняется следующий оператор от имени текущего системного идентификатора авторизации: REVOKEINSERT(CN), UPDATE(CN), REFERENCES(CN) ONTABLETN FROMACASCADE.
  • Пусть V - имя любого представления, ссылающегося на столбец C таблицы T. При удалении столбца неявно выполняется следующий оператор от имени текущего системного идентификатора авторизации: DROPVIEWVNCASCADE.
  • Идентифицируемый столбец и его описатель уничтожаются.
  • Степень T уменьшается на единицу. Порядковые номера всех столбцов с порядковым номером больше чем у C уменьшаются на единицу.


  • Определение добавления табличного ограничения имеет следующий синтаксис:

    <add table constraint definition> ::= ADD <table constraint definition>

    Это определение не нуждается в пояснениях.

    Определение уничтожения табличного ограничения имеет следующий синтаксис:

    <drop table constraint definition> ::= DROP CONSTRAINT <constraint name> <drop behavior>

    Пояснения:

  • Пусть T имя таблицы, упоминаемой в операторе ALTERTABLE, а TC - имя уничтожаемого ограничения целостности.
  • Если TC является ограничением уникальности и существует ссылочное ограничение RC со ссылкой на таблицу T по столбцам уникальности TC, то будем говорить, что RC зависит от TC.
  • Если указано RESTRICT, то никакое табличное ограничение не должно зависеть от TC.
  • Если указано CASCADE, то все зависимые объекты уничтожаются при выполнении неявного оператора ALTERTABLE (см. ниже).
  • Пусть TCN2 - имя любого табличного ограничения, зависящего от TC, и пусть T2 - имя таблицы, определение которой включало TCN2. Тогда выполняется неявный оператор ALTERTABLET2 DROPCONSTRAINTTCN2 CASCADE.
  • Описатель TC удаляется из описания таблицы T.
  • Идентифицированное табличное ограничение и его описатель разрушаются.



  • Содержание раздела