Это, наиболее простое, условие целостности данных требует, чтобы некоторые столбцы не содержали значений NULL. Стандарт ANSI/ISO и большинство коммерческих СУБД поддерживают выполнение подобного условия, позволяя пользователю при создании таблицы объявить, что некоторые столбцы не могут содержать значений NULL. Само условие задается как часть инструкции CREATE TABLE (рассматривается в разделе язык определения данных)в виде ограничения NOT NULL.
Если на столбец наложено ограничение NOT NULL, то для выполнения этого условия СУБД обеспечивает следующее:
• ни в одной инструкции INSERT, добавляющей в таблицу строку или строки, нельзя указывать значение NULL для этого столбца; попытка добавить строку, содержащую (явно или неявно) значение NULL для такого столбца, вызовет ошибку;
• ни в одной инструкции UPDATE, обновляющей столбец, нельзя присваивать столбцу значение NULL; попытка обновить такой столбец, присвоив ему, значение NULL, вызовет ошибку.
Недостатком условия обязательного наличия данных является то, что его необходимо задавать при создании таблицы. Как правило, для таблицы, созданной ранее, это условие отменить нельзя. Но это не очень большой недостаток, поскольку обычно уже при создании таблицы бывает ясно, какой столбец может содержать значения NULL, а какой – нет.
Невозможность наложения ограничения NOT NULL на уже существующую таблицу является следствием того, что в большинстве СУБД значения NULL реализованы на внутреннем уровне. Обычно СУБД резервирует в каждой хранимой строке по одному дополнительному байту на каждый столбец, в котором значения NULL допустимы. Дополнительный байт служит “индикатором” значения NULL, и если в столбце содержится NULL, то этому байту присваивается заранее установленное значение. Если же для столбца определено ограничение NOT NULL, то байт индикатора отсутствует, что позволяет экономить дисковую память. Чтобы динамически отменить это ограничение, требуется “на ходу” переконфигурировать хранимые на диске записи, а в больших базах данных это весьма накладно.
При создании таблицы за каждым столбцом закрепляется определенный тип данных, и СУБД следит за тем, чтобы в столбец вводились данные только этого типа.
Ограничение на значения столбца аналогично условию отбора в предложении WHERE и возвращает значение TRUE или FALSE. Если для столбца задано ограничение, то при каждом добавлении новой строки или обновлении старой СУБД автоматически проверяет, выполняется ли ограничение для значения в этом столбце. Если оно не выполняется, то инструкция INSERT или UPDATE завершается ошибкой. Ограничение на значения столбца задается при определении столбца в инструкции CREATE TABLE.
Рассмотрим фрагмент инструкции CREATE TABLE, создающей таблицу STAFF с тремя дополнительными ограничениями: