← Назад к вопросам

Что такое первичный ключ (Primary Key)?

1.3 Junior🔥 181 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое первичный ключ (Primary Key)?

Первичный ключ — это поле или комбинация полей в таблице БД, которое уникально идентифицирует каждую строку.

Основные свойства

  • Уникальность: каждое значение встречается только один раз
  • Не NULL: первичный ключ не может быть пустым
  • Один на таблицу: максимум один первичный ключ (хотя может быть составной)
  • Уникальный индекс: БД автоматически создаёт индекс для ускорения поиска

Примеры

Таблица Users:

id (PK) | name    | email
1       | John    | john@example.com
2       | Alice   | alice@example.com
3       | Bob     | bob@example.com

Здесь id — первичный ключ. Гарантирует, что каждый пользователь имеет уникальный id.

Типы первичных ключей

Простой первичный ключ:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

Составной первичный ключ:

CREATE TABLE order_items (
    order_id INT,
    item_id INT,
    quantity INT,
    PRIMARY KEY (order_id, item_id)
);

Здесь PRIMARY KEY состоит из двух полей. Комбинация (order_id, item_id) должна быть уникальной.

Суррогатный ключ (Surrogate Key):

CREATE TABLE products (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(100)
);

Используется UUID или BIGINT — вместо естественного ключа.

Отличие от UNIQUE

PRIMARY KEY:

  • Не может быть NULL
  • Только один на таблицу
  • Создаёт clustered индекс
  • Используется для references (foreign key)

UNIQUE:

  • Может быть несколько NULL
  • Можно несколько на таблицу
  • Создаёт non-clustered индекс
  • Не используется для FK

Тестирование первичного ключа

Проверка уникальности:

INSERT INTO users (id, name) VALUES (1, 'John');
INSERT INTO users (id, name) VALUES (1, 'Alice');  -- ERROR: Duplicate key

Проверка NOT NULL:

INSERT INTO users (id, name) VALUES (NULL, 'Bob');  -- ERROR: NULL not allowed

Проверка составного ключа:

INSERT INTO order_items VALUES (1, 1, 5);  -- OK
INSERT INTO order_items VALUES (1, 1, 10); -- ERROR: Duplicate (1,1)

Для QA Engineer

При тестировании нужно:

  1. Попробовать вставить дубликат PK — должна ошибка
  2. Попробовать вставить NULL — должна ошибка
  3. Проверить, что БД правильно работает с составными ключами
  4. Проверить производительность — индекс ускоряет поиск
  5. Проверить целостность данных — PK должен быть последовательным

Первичный ключ — это фундамент целостности данных в БД.