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. - Ключ из нескольких столбцов — составной первичный ключ (например, для таблиц-связок).