CREATE TABLE и первичный ключ

Создаём таблицы по всем правилам: столбцы, первичный ключ и автонумерация.

Первичный ключ (PRIMARY KEY) — столбец (или набор столбцов), который однозначно идентифицирует каждую строку таблицы и не может быть пустым.

Анатомия CREATE TABLE

Таблица описывается списком столбцов; у каждого — имя, тип и при желании ограничения. В MySQL у определения часто есть «хвост» с движком и кодировкой.

CREATE TABLE users (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  name VARCHAR(100) NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Этот блок MySQL-специфичный (AUTO_INCREMENT, ENGINE, CHARSET), поэтому он для чтения.

Зачем нужен первичный ключ

Первичный ключ — основа таблицы. Он гарантирует, что у каждой строки есть уникальный «адрес», по которому к ней можно обратиться, обновить или связать с другой таблицей. Без него легко получить дубли и невозможно надёжно сослаться на строку.

Хороший первичный ключ:

  • уникален — двух одинаковых значений быть не может;
  • не NULL — обязателен у каждой строки;
  • стабилен — не меняется со временем (поэтому email — плохой ключ, его могут сменить).

Чаще всего ключ — это синтетический числовой id с автонумерацией. Так строки удобно связывать, и значение никогда не «протухает».

Создаём таблицу в песочнице

В переносимом SQL первичный ключ с автонумерацией — это INTEGER PRIMARY KEY. Запустите пример:

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email TEXT NOT NULL,
  name TEXT NOT NULL
);

INSERT INTO users (email, name) VALUES
  ('[email protected]', 'Анна'),
  ('[email protected]', 'Борис');

SELECT id, name, email FROM users;

Вывод:

id  name   email
1   Анна   [email protected]
2   Борис  [email protected]

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

Иногда строку уникально определяет комбинация столбцов — например, в таблице-связке «студент-курс». Тогда ключ объявляют из нескольких полей:

CREATE TABLE enrollments (
  student_id INTEGER,
  course_id INTEGER,
  PRIMARY KEY (student_id, course_id)
);

INSERT INTO enrollments VALUES (1, 10), (1, 20), (2, 10);

SELECT * FROM enrollments ORDER BY student_id;

Вывод:

student_id  course_id
1           10
1           20
2           10

Пара (student_id, course_id) уникальна — один студент не запишется на один курс дважды.

Итог

  • CREATE TABLE перечисляет столбцы с типами и ограничениями.
  • Первичный ключ уникален, не NULL и стабилен; обычно это числовой id с автонумерацией.
  • В MySQL автонумерация — AUTO_INCREMENT, в переносимом SQL — INTEGER PRIMARY KEY.
  • Ключ из нескольких столбцов — составной первичный ключ (например, для таблиц-связок).
Проверьте себя
1. Какие свойства обязательны для первичного ключа?
Aон должен быть текстовым
Bуникальность и запрет NULL
Cон должен меняться со временем
Dон должен быть длиннее 10 символов
2. Почему email — плохой кандидат в первичные ключи?
Aон слишком короткий
Bпользователь может его сменить, а ключ должен быть стабильным
Cего нельзя проиндексировать
Dон не бывает уникальным
3. Что такое составной первичный ключ?
Aключ, зашифрованный двумя алгоритмами
Bпервичный ключ из нескольких столбцов сразу
Cключ, который ссылается на другую таблицу
Dключ с автонумерацией
Поддержать проект