Оператор ALTER TABLE |
||
Можно выделить следующие уровни проверочных ограничений:
В ограничении уровня столбца проверяется значение только одного отдельного столбца, другими словами, в ограничении данного типа имеется ссылка только на один столбец той таблицы, в определении которой содержится данное ограничение. Чтобы привести пример такого ограничения, вернёмся к схеме «Компьютерная фирма». В таблице Product в столбце type может находиться одно из трех значений. Мы можем запретить ввод любой другой информации в этот столбец при помощи такого ограничения:
Давайте сделаем отступление, чтобы познакомиться с оператором ALTER TABLE, который позволит нам изменять структуру таблицы, не пересоздавая её всякий раз заново. Это тем более важно, что изменение структуры может потребоваться тогда, когда таблица уже содержит данные. С помощью оператора ALTER TABLE можно добавить или удалить столбцы, значения по умолчанию, а также ограничения. В настоящий момент нас интересует добавление ограничения на столбец type, поэтому вначале приведём синтаксис оператора для добавления ограничения:
Давайте теперь добавим наше ограничение и проверим, как оно работает.
Чтобы убедиться в том, что ограничение работает как мы того ожидаем, попробуем добавить модель нового типа:
Как и ожидалось, в ответ мы получим сообщение об ошибке: The INSERT statement conflicted with the CHECK constraint "chk_type". The conflict occurred in database "learn", table "dbo.product", column 'type'. The statement has been terminated. (Конфликт инструкции INSERT с ограничением CHECK "chk_type". Конфликт произошел в базе данных "learn", таблица "dbo.product", столбец 'type'. Выполнение данной инструкции было прервано.) Как легко догадаться, ограничение уровня строки содержит ссылки на несколько столбцов. При этом ограничение проверяется для каждой изменяемой строки отдельно. Строка может быть добавлена (или изменена), если ограничение не нарушено. В качестве примера давайте запретим производителю Z выпускать что-либо помимо принтеров.
Итак, ограничение проверяет, что модель в таблице Product должна быть принтером производителя Z (maker='Z' and type= 'printer') или любого другого производителя (но не Z). Если мы попытаемся добавить модель ПК производителя Z,
Разумеется, другой производитель сможет выпускать все, что угодно:
|