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

Ответ

Primary Key (Первичный ключ, PK) — это ограничение (constraint), которое однозначно идентифицирует каждую запись (строку) в таблице реляционной базы данных.

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

  1. Уникальность: В таблице не может быть двух строк с одинаковым значением первичного ключа.
  2. Непустота (NOT NULL): Поле первичного ключа не может содержать значение NULL.
  3. Только один на таблицу: У таблицы может быть только один первичный ключ (хотя он может состоять из нескольких столбцов — составной ключ).

Зачем он нужен и как я его использовал:

  • Гарантия целостности данных: База данных не позволит вставить дубликат или NULL в PK. Это защищает от логических ошибок в данных.
  • Связи между таблицами (FOREIGN KEY): PK является «якорем» для внешних ключей из других таблиц, что позволяет строить связи.
  • Кластеризованные индексы: В большинстве СУБД (SQL Server, MySQL/InnoDB) PK по умолчанию создаёт кластеризованный индекс — данные в таблице физически упорядочены по этому ключу, что ускоряет поиск и range-запросы.

Примеры создания:

-- Простой первичный ключ на один столбец (часто автоинкрементный)
CREATE TABLE Users (
    user_id INT PRIMARY KEY IDENTITY(1,1), -- SQL Server
    -- user_id SERIAL PRIMARY KEY,        -- PostgreSQL
    -- user_id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL
    email VARCHAR(255) NOT NULL UNIQUE
);

-- Составной первичный ключ (Composite Primary Key)
CREATE TABLE OrderItems (
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- Комбинация этих двух полей уникальна
);

-- Добавление PK к существующей таблице
ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY (employee_id);

Важно: Выбор хорошего PK (суррогатный vs. естественный) — это важное архитектурное решение, влияющее на производительность и дизайн схемы.

Ответ 18+ 🔞

А, слушай, про первичный ключ? Ну это ж классика, ёпта, основа основ! Если по-простому, то это такая заглушка на всю таблицу, которая каждую строчку делает уникальной, чтобы их не перепутать. Как паспорт у человека, только для данных.

Что он из себя представляет, этот хитрожопый ключ:

  1. Уникальность ебать: Двух одинаковых значений в нём быть не может, иначе пиздец — база тебе такую хуйню просто не проглотит.
  2. Пустым не бывает (NOT NULL): Там всегда должно быть какое-то значение, NULL — это не прокатит, доверия к таким полям ноль ебать.
  3. Один на всю хату: В одной таблице может быть только один такой главный ключ, хотя он может состоять из нескольких полей сразу — это называется составной, ну чтобы запутать всех окончательно.

А нахуя он вообще нужен, спросишь? Я его юзал, чтобы:

  • Данные не превратились в кашу: База сама следит, чтобы дубликаты или пустые значения в PK не проскочили. Защита от кривых рук, блядь.
  • Связывать таблицы между собой (FOREIGN KEY): PK — это как крючок, за который цепляются внешние ключи из других таблиц. Без него связи строить — это пиздопроебибна.
  • Скорость, мать его: В большинстве систем (типа SQL Server, MySQL) PK по умолчанию создаёт кластеризованный индекс — это значит, что данные на диске лежат уже в отсортированном по этому ключу виде. Ищется всё быстро, особенно если ищешь по диапазону. Удивление пиздец, когда впервые видишь разницу.

Смотри, как это выглядит в коде, чувак:

-- Простейший ключ на одно поле (часто с автоинкрементом, чтобы не париться)
CREATE TABLE Users (
    user_id INT PRIMARY KEY IDENTITY(1,1), -- SQL Server
    -- user_id SERIAL PRIMARY KEY,        -- PostgreSQL
    -- user_id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL
    email VARCHAR(255) NOT NULL UNIQUE
);

-- Составной первичный ключ (Composite Primary Key) — когда одного поля мало
CREATE TABLE OrderItems (
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- Уникальна только парочка этих полей
);

-- Дописать ключ к уже существующей таблице (бывает, просрал сначала)
ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY (employee_id);

И главное, запомни: Выбрать нормальный PK — это не хуй с горы ткнуть. Решить, делать ли его искусственным (суррогатным) или брать из реальных данных (естественный) — это целая архитектурная песня, которая потом на производительность и всю схему влияет. Пизда рулю, если накосячить.