Пример:
ALTTER TABLE CITY ADD CONSTRAINT CITY_uniq
UNIQUE (CITYNAME);
Названия городов, только уникальные значения.
Ограничения на вторичный ключ
Подобный вид ограничений мы уже рассматривали, когда изучали первичные и вторичные ключи. Смысл данного ограничения в том, что в колонке некоторой таблицы (вторичный ключ) могут находится только значения, которые есть в другой, основной таблице в колонке первичного ключа.
Синтаксис
ALTER TABLE for_TABLE
ADD CONSTRAINT fk_const_NAME
FOREIGN KEY (fk_column)
REFERENCES primary_talbe (pk_column);
Здесь for_TABLE, fk_column – таблица, колонка, куда устанавливается ограничение. Проверка значений происходит в таблице primary_talbe и колонке pk_column.
Пример
Здесь для таблицы MAN колонки CITYCODE устанавливается ссылочное ограничение по колонке CITYCODE с таблицей CITY, где CITY является главной таблицей.
ALTER TABLE MAN
ADD CONSTRAINT fk_MAN_CITY_CODE
FOREIGN KEY (CITYCODE)
REFERENCES CITY (CITYCODE);
Ограничение CHECK на вставку и изменение данных
– вычитание;
Синтаксис
ALTER TABLE TABLENAME ADD CONSTRAINT CHECK_NAME
CHECK (condition);
Здесь condition – условие, CHECK_NAME – наименование ограничения, TABLENAME – имя таблицы.
Пример
Ограничение в таблице MAN на возраст (YEAROLD) больше 16 лет:
ALTER TABLE MAN ADD CONSTRAINT CHECK_YEAROLD_MAN
CHECK (YEAROLD> 16);
Важные замечания
Ограничение уникальности можно также создавать для нескольких колонок таблицы, это делается следующим образом:
ALTTER TABLE CITY ADD CONSTRAINT CITY_uniq
UNIQUE (CITYNAME, CITYCODE);
При этом отдельно необходимо контролировать вставку пустых значений для соответствующих полей таблицы.
Существуют дополнительные опции для создания ограничений ссылочной целостности:
• On delete cAScade – автоматическое удаление связанных строк по внешнему ключу;
• On delete NULL – значение внешнего ключа устанавливается в NULL.
При создании множества ограничений CHECK необходимо, чтобы между ними не было конфликтов, то есть чтобы правила не противоречили друг другу.
Условие в ограничении CHECK может ссылаться на любой столбец таблицы, но не может ссылаться на столбцы другой таблицы.
Вопросы учеников
Чем ограничение на уникальность UNIQUE отличается от первичного ключа (Primary KEY)?
Первичный ключ в таблице может быть только один, ограничений на уникальность может быть много. В таблице в поле с ограничением уникальности допускается вставка пустых значений. Также для первичного ключа создается специальный индекс (pk).
Если колонка в таблице содержит пустые значения, а мы добавляем к этой колонке ограничение NOT NULL, что произойдет?
Вы получите сообщение об ошибке, и ограничение не будет добавлено.
Можно ли создавать ограничения для колонок BLOB, CLOB?
Нет, некоторые виды ограничений можно создавать только для простых типов полей.
Контрольные вопросы и задания для самостоятельного выполнения
1. Добавьте ограничение для уникальных значений на колонки PHONENUM таблицы AUTO.
2. Добавьте ограничение на вставку пустых значений для колонки YEAROLD в таблице MAN.
3. Добавьте ограничение CHECK для колонки YEAROLD в таблице MAN, чтобы YEAROLD было меньше 100.
4. Добавьте ограничение ссылочной целостности для двух таблиц – AUTO и MAN.