Логическое проектирование и реализация реляционных баз данных. Основы Transact-SQL (Лабораторная работа № 2), страница 6

-- Столбец с неименованным ограничением уникальности

st_name varchar(80) unique

-- То же самое, но с присвоением имени ОЦ

st_name varchar(80) constraint st_name_unique unique

-- Определение внешнего ключа

id_train int constraint fk_coach_train foreign key references trains(id_train)

-- Ограничение check

mark tinyint check mark >= 3 and mark <= 5

-- Это же ограничение можно записать так

mark tinyint check mark between 3 and 5

Несколько по-другому выглядит описание ОЦ табличного уровня:

[constraint имя]

           {{primary key | unique} (столбец [,…n] )}

           | foreign key (столбец [,…n]) references таблица [(столбец [,…n)]

                       [on delete {cascade | no action}]

                       [on update {cascade | no action}]

           | check (условия)}

Здесь после ключевых слов primarykey, foreignkey, notnull, unique должны указываться списки столбцов (в круглых скобках). Исключением является ОЦ check, поскольку имена столбцов для него фигурируют в логическом условии.

Необходимо заметить, что нельзя привязывать ОЦ к вычисляемым столбцам.

Полный синтаксис команды createtable и всех связанных с ней конструкций можно найти в справочной системе SQL Server или в [2].

2.2.3. Модификация структуры таблиц. Удаление таблиц

На практике нередко возникают случаи, когда уже существующую и заполненную таблицу необходимо определенным образом реорганизовать: добавить или удалить столбец, изменить тип столбца, добавить или удалить ОЦ и т. п. В большинстве диалектов SQL существует команда altertable, предназначенная для этих целей. Синтаксис ее (опять-таки упрощенный) в Transact-SQL имеет следующий вид:

altertable имя_таблицы

           {altercolumn имя_столбца новый_тип_данных

           | add

{<определение_столбца>

|<определение_вычисляемого_столбца>

|<ограничение_на_уровне_таблицы>} [,…n]

| drop

            {[constraint] имя_ограничения

            | column имя_столбца} [,…n]

| {check | nocheck} constraint

            {all | имя_ограничения} [,…n]

| {enable | disable} trigger {all | имя_триггера [,…n]}}

За ключевыми словами altertable и именем таблицы следует одна из секций: altercolumn, add, drop, {check | nocheck} и т. п. В настоящей работе обозреваются только некоторые из них.

В секции altercolumn подвергается изменениям существующий столбец таблицы, а вернее – его тип, поскольку переименовывать столбцы командой altertable нельзя.

В секции add описывается новый столбец (простой или вычисляемый) или новое ОЦ уровня таблицы – по аналогии с тем, как это делается для createtable.

В секции drop указываются ограничения и столбцы, удаляемые из таблицы.

Секция {check | nocheck} позволяет приостанавливать действия ОЦ без их удаления (nocheck имя_ОЦ) и вновь «включать», т. е. приводить в действие ранее приостановленные  ограничения (check имя_ОЦ).

Чтобы удалить таблицу из БД, следует воспользоваться оператором droptable, после которого через пробел указывается имя таблицы. Таблица не будет уничтожена, если другие таблицы связаны с ней через внешний ключ: они должны быть удалены в первую очередь.

2.2.4. Вставка, удаление, модификация строк

Вставка

За вставку строк в таблицу отвечает оператор insert. Его упрощенный синтаксис:

insertinto имя_таблицы [(имена_атрибутов)] values (список_значений)

Записанный в таком виде, оператор позволяет добавить одну запись. При этом в списке имен атрибутов (полей) можно указать поля, значение задается явно. Выше приводился пример таблицы trains с четырьмя атрибутами: id_train, train_name, train_type и train_number. Рассмотрим случай вставки в неё строки с явным указанием атрибутов:

insert into trains (id_train, train_name) values (1, ‘Смена’)

Список значений строго соответствует списку атрибутов. Поля вставленной строки будут равны:

id_train – 1

train_name – ‘Смена’

train_type – NULL

train_number – NULL.

Таким образом, умалчиваемые атрибуты принимают либо неопределенное, либо умалчиваемое (default) значение.