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
  ('anna@mail.ru', 'Анна'),
  ('boris@mail.ru', 'Борис');

SELECT id, name, email FROM users;

Вывод:

id  name   email
1   Анна   anna@mail.ru
2   Борис  boris@mail.ru

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

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

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он должен меняться со временем
Cуникальность и запрет NULL
Dон должен быть длиннее 10 символов
2. Почему email — плохой кандидат в первичные ключи?
Aон слишком короткий
Bего нельзя проиндексировать
Cон не бывает уникальным
Dпользователь может его сменить, а ключ должен быть стабильным
3. Что такое составной первичный ключ?
Aпервичный ключ из нескольких столбцов сразу
Bключ, зашифрованный двумя алгоритмами
Cключ, который ссылается на другую таблицу
Dключ с автонумерацией