0Pricing
SQL Academy · Урок

Ограничения NOT NULL и CHECK

Запрещайте отсутствующие значения с помощью NOT NULL и проверяйте правила предметной области с помощью CHECK (price > 0, status IN ('active','archived'))

«Ограничения NOT NULL и CHECK» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Зачем нужны ограничения?

Ограничения переносят проверку корректности в базу данных. Преимущество огромно: каждое приложение, скрипт и произвольный запрос записывают корректные данные — или явно завершаются ошибкой.

NOT NULL

Самое простое ограничение: этот столбец должен иметь значение:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  age   INT                                  -- NULL allowed
);

Добавление NOT NULL позже

Сначала заполните пропущенные значения, затем добавьте ограничение:

UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;

Ограничение CHECK

Произвольное логическое выражение, которому должна соответствовать каждая строка:

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  price NUMERIC(10,2) NOT NULL CHECK (price > 0),
  discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);

CHECK со значениями наподобие перечисления

Ограничить столбец фиксированным набором значений:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  status TEXT NOT NULL
    CHECK (status IN ('pending','paid','shipped','cancelled'))
);

NULL незаметно проходит CHECK

Ограничение CHECK считается выполненным, когда выражение равно NULL (неизвестно). Если нужна строгая гарантия, объедините его с NOT NULL:

CREATE TABLE invoices (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

CHECK для нескольких столбцов

Можно ссылаться на несколько столбцов:

CREATE TABLE bookings (
  start_at TIMESTAMPTZ NOT NULL,
  end_at   TIMESTAMPTZ NOT NULL,
  CHECK (start_at < end_at)
);

Добавление CHECK позже

Сначала проверьте существующие строки, затем добавьте ограничение:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates it

Приём с NOT VALID для больших таблиц

Пропустите предварительное полное сканирование и выполните проверку позже в фоновом режиме:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;

Именованные ограничения

Всегда называйте ограничения, чтобы сообщения об ошибках и миграции были предсказуемыми:

ALTER TABLE products
  ADD CONSTRAINT products_price_positive CHECK (price > 0);

Не дублируйте логику в приложении

Если база данных обеспечивает это ограничение, выигрывает каждый путь выполнения — больше не будет ситуации «я забыл проверить». Сохраняйте дублирующую проверку в приложении для удобства пользователя (мгновенная обратная связь), но источником истины должна быть база данных.

Итоги

NOT NULL и CHECK блокируют наиболее распространённые некорректные данные.

  • NOT NULL: пропущенные значения запрещены
  • CHECK: произвольные правила для каждой строки
  • Используйте NOT VALID + VALIDATE для добавления ограничений без остановки работы

Быстрая проверка

Что произойдёт, если задать CHECK (price > 0) для столбца без NOT NULL?

Часто задаваемые вопросы

Урок «Ограничения NOT NULL и CHECK» бесплатный?

Да — полный текст урока «Ограничения NOT NULL и CHECK» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Ограничения NOT NULL и CHECK»?

Запрещайте отсутствующие значения с помощью NOT NULL и проверяйте правила предметной области с помощью CHECK (price > 0, status IN ('active','archived')) Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Ограничения NOT NULL и CHECK»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Ограничения NOT NULL и CHECK
  2. Ограничения UNIQUE и составные ключи
  3. FOREIGN KEY и ссылочные действия
  4. Значения DEFAULT и генерируемые столбцы
← Назад к SQL Academy