Что означает NOT NULL в SQL?sql-97

Определение NOT NULL

NOT NULL - это ограничение (constraint) в SQL, которое гарантирует, что столбец не может содержать NULL-значений. Это означает, что при вставке или обновлении записи в таблице данный столбец обязательно должен иметь какое-либо значение.

Основные характеристики

  1. Обязательное поле: Столбец с NOT NULL всегда должен содержать значение
  2. Защита от NULL: Предотвращает вставку записей с NULL в этот столбец
  3. Целостность данных: Обеспечивает, что критически важные поля всегда заполнены

Примеры использования

Создание таблицы с NOT NULL

CREATE TABLE employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);

В этом примере все поля, кроме id (который уже имеет ограничение PRIMARY KEY, подразумевающее NOT NULL), должны быть заполнены.

Добавление NOT NULL к существующему столбцу

ALTER TABLE employees
MODIFY COLUMN hire_date DATE NOT NULL;

Попытка вставить NULL вызовет ошибку

INSERT INTO employees (id, first_name, last_name, email)
VALUES (1, NULL, 'Smith', 'john@example.com');

Этот запрос завершится с ошибкой, так как first_name не может быть NULL.

Отличие от других ограничений

  1. NOT NULL vs DEFAULT:

    • NOT NULL требует явного указания значения
    • DEFAULT устанавливает значение автоматически, если оно не указано
  2. NOT NULL vs PRIMARY KEY:

    • PRIMARY KEY автоматически включает NOT NULL
    • В одной таблице может быть только один PRIMARY KEY, но много NOT NULL столбцов

Практическое применение

  1. Обязательные поля: Для данных, которые всегда должны присутствовать (имена, email, даты)
  2. Связи между таблицами: Внешние ключи обычно делают NOT NULL
  3. Оптимизация запросов: NOT NULL столбцы могут обрабатываться СУБД более эффективно

Важные нюансы

  1. При добавлении NOT NULL к существующему столбцу все записи уже должны содержать значения в этом столбце
  2. В некоторых СУБД (например, Oracle) пустая строка ('') считается NULL, что может вызвать неожиданные ошибки
  3. NOT NULL можно комбинировать с другими ограничениями:
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL CHECK (price > 0)
);

Резюмируем: ограничение NOT NULL - это фундаментальный механизм SQL для обеспечения целостности данных, гарантирующий, что важные поля всегда будут содержать значения. Оно простое в использовании, но критически важное для проектирования надежных баз данных.