Ответ
Эти ключи служат разным, но взаимосвязанным целям в реляционной модели данных.
Первичный ключ (PRIMARY KEY) — это столбец (или группа столбцов), который однозначно идентифицирует каждую строку в своей таблице.
Свойства:
- Уникальность: Значение должно быть уникальным для каждой записи.
- NOT NULL: Не может содержать
NULL. - Один на таблицу: В таблице может быть только один PRIMARY KEY.
- Индекс: Создает кластеризованный (чаще всего) или некластеризованный индекс для быстрого поиска.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- Первичный ключ
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100)
);
Внешний ключ (FOREIGN KEY) — это столбец (или группа столбцов) в одной таблице, который ссылается на PRIMARY KEY (или UNIQUE ключ) в другой таблице. Он устанавливает и поддерживает связь между таблицами.
Свойства:
- Ссылочная целостность: Гарантирует, что значение во внешнем ключе соответствует существующей записи в связанной (родительской) таблице.
- Может быть NULL: Если связь необязательна.
- Несколько на таблицу: В таблице может быть много FOREIGN KEY.
- Ограничения (CONSTRAINTS): Определяют поведение при удалении или обновлении родительской записи (
ON DELETE CASCADE,ON UPDATE SET NULLи т.д.).
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT, -- Этот столбец будет внешним ключом
total DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) -- Связь с таблицей users
ON DELETE CASCADE -- При удалении пользователя удалятся его заказы
);
Итог: PRIMARY KEY обеспечивает уникальность внутри таблицы, а FOREIGN KEY — целостность связей между таблицами.
Ответ 18+ 🔞
Давай разжую, как есть, про эти ваши ключи, а то смотрю — у некоторых в глазах уже туман. Представь, что у тебя есть бар.
Первичный ключ (PRIMARY KEY) — это как татуха на жопе у каждого посетителя. Уникальная, нихуя не повторяется, и без неё тебя в заведение просто не пустят. Это твой главный и единственный пропуск.
Что он из себя представляет, этот красавец:
- Один такой на районе: Двух одинаковых номеров на двух задницах быть не может. Уникальность, блядь, полная.
- Пустым не бывает:
NULL— это проёб, так не работает. Номер есть всегда. - Один царь в царстве: В одной таблице такой пахан может быть только один.
- Всё быстро ищет: База данных по нему сразу всё индексирует, чтобы не рыться, как в помойке.
CREATE TABLE посетители (
id INT AUTO_INCREMENT PRIMARY KEY, -- Вот он, король, татуха-идентификатор
email VARCHAR(255) UNIQUE NOT NULL,
имя VARCHAR(100)
);
Внешний ключ (FOREIGN KEY) — это уже история поинтереснее. Это как чек из нашего бара, который официантка приносит. На этом чеке написано: «Счёт для посетителя №15». И этот номер ссылается на ту самую татуху на жопе в таблице посетители. Без реального посетителя №15 — чек пиздец как подозрительный, да?
В чём его сила и мощь:
- Порядок навел: Он следит, чтобы ты не приписал заказ какому-то левому челу, которого в базе нет. Целостность связей, ёпта.
- Может и отсутствовать: Иногда чек «на стол» — без привязки к конкретному челу (
NULL). - Их дохуя может быть: На одного посетителя может быть куча чеков (заказов). Поэтому внешних ключей в таблице — овердохуища.
- Умный дохуя: Можно настроить, что будет, если посетителя (родительскую запись) удалить. Удалили чувака — все его чеки автоматом в утиль (
ON DELETE CASCADE). Удобно, пиздец.
CREATE TABLE заказы (
id INT PRIMARY KEY,
посетитель_id INT, -- А вот и ссылочка на татуху! Будущий внешний ключ.
сумма DECIMAL(10,2),
FOREIGN KEY (посетитель_id) REFERENCES посетители(id) -- Чёткая привязка
ON DELETE CASCADE -- Чувака выгнали — все его долги списались, красота!
);
Короче, суть: PRIMARY KEY — это твоё уникальное, нихуя не повторяющееся удостоверение личности внутри твоей палаты. А FOREIGN KEY — это бумажка между палатами, которая кричит: «Эй, смотри, я принадлежу вот этому конкретному мудаку из соседней комнаты!». Первый обеспечивает порядок у себя дома, второй — не даёт насрать в коридоре, сохраняя связи.