Ограничения (Constraints): PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, DEFAULT

🔑 Введение в ограничения (Constraints)

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

В SQL есть пять основных ограничений:

  1. PRIMARY KEY — главный ключ
  2. FOREIGN KEY — внешний ключ
  3. UNIQUE — уникальность
  4. NOT NULL — запрет на пустые значения
  5. DEFAULT — значение по умолчанию

Разберём каждое на примерах!


🏆 PRIMARY KEY — главный идентификатор

Это столбец (или группа столбцов), который однозначно идентифицирует каждую строку в таблице. Как паспорт для человека!

CREATE TABLE users (
    user_id INT PRIMARY KEY,  -- Это наш главный ключ
    username VARCHAR(50),
    email VARCHAR(100)
);

Особенности PRIMARY KEY:

  • ❌ Не может быть NULL
  • 🔄 Должен быть уникальным для каждой строки
  • 🏷️ В таблице может быть только один PRIMARY KEY

Пример с составным ключом:

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)  -- Составной ключ из двух полей
);

🌉 FOREIGN KEY — связь между таблицами

Это поле, которое ссылается на PRIMARY KEY другой таблицы. Создаёт отношение "родитель-потомок" между таблицами.

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)  -- Связь с таблицей users
);

Что происходит, если:

  • Попытаться удалить запись в users, на которую ссылается orders?
  • По умолчанию — ошибка! Но можно настроить поведение:
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON DELETE CASCADE  -- Удалит связанные записи автоматически

Другие варианты:

  • ON DELETE SET NULL — установит NULL вместо удаления
  • ON DELETE NO ACTION — запретит удаление (по умолчанию)

🦄 UNIQUE — гарантия уникальности

Гарантирует, что все значения в столбце будут разными. В отличие от PRIMARY KEY, может быть NULL (но только один NULL!).

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_code VARCHAR(20) UNIQUE,  -- Код товара должен быть уникальным
    name VARCHAR(100)
);

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

  • Электронные почты пользователей
  • Номера телефонов
  • Артикулы товаров

🚫 NOT NULL — запрет на пустые значения

Простое, но мощное ограничение — поле не может содержать NULL.

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,  -- Имя обязательно!
    last_name VARCHAR(50) NOT NULL,
    hire_date DATE NOT NULL
);

Совет: Почти всегда PRIMARY KEY поля должны быть NOT NULL, но SQL делает это автоматически.


⚖️ DEFAULT — значение по умолчанию

Устанавливает значение, которое будет использоваться, если при вставке оно не указано.

CREATE TABLE blog_posts (
    post_id INT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- Автоматическая дата создания
    is_published BOOLEAN DEFAULT FALSE
);

Работа с DEFAULT:

-- При вставке можно явно указать DEFAULT
INSERT INTO blog_posts (post_id, title) 
VALUES (1, 'Мой первый пост', DEFAULT, DEFAULT);

-- Или просто опустить эти поля
INSERT INTO blog_posts (post_id, title) 
VALUES (2, 'Второй пост');

🧩 Комбинирование ограничений

Ограничения можно комбинировать для создания точных правил:

CREATE TABLE bank_accounts (
    account_id INT PRIMARY KEY,
    account_number VARCHAR(20) UNIQUE NOT NULL,  -- И уникальный, и обязательный
    balance DECIMAL(15,2) DEFAULT 0.00,
    client_id INT NOT NULL,
    FOREIGN KEY (client_id) REFERENCES clients(client_id)
);

Почему это мощно? Такая таблица будет:

  1. Гарантировать уникальность account_id и account_number
  2. Не позволит создать счёт без номера и клиента
  3. У новых счетов баланс будет 0, если не указан иной
  4. Не позволит ссылаться на несуществующих клиентов

💡 Главные выводы

  1. PRIMARY KEY — твой главный идентификатор, уникальный и обязательный
  2. FOREIGN KEY — создаёт связи между таблицами, поддерживает целостность данных
  3. UNIQUE — гарантирует уникальность, но разрешает один NULL
  4. NOT NULL — простое, но важное ограничение против пустых значений
  5. DEFAULT — умолчательные значения экономят время и предотвращают ошибки

Попробуй применить эти ограничения в своём следующем проекте — они сделают твою базу данных надёжной и предсказуемой! 🛡️

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео