В SQL, когда вы создаёте поле для идентификатора (id
), ключа в таблице, часто используется либо INT
, либо SERIAL
. Они похожи, но не совсем одно и то же.
INT
— просто числовой тип данных. Если вы хотите, чтобы значения увеличивались автоматически (1, 2, 3, …), вам придётся сами этим управлять или использовать дополнительный механизм.SERIAL
— это удобный ярлык (синтаксический сахар), который говорит базе: «Создай мнеINT
-поле, и настрой так, чтобы оно автоматически увеличивалось при каждом новом INSERT.»
То есть, когда вы пишете:
1 2 3 4 5 |
CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT, email TEXT ); |
то… и здесь хочется привести пример, который раскрывает более полную версию запроса.
Но тут мы упираемся в диалекты SQL. На практике вы будете пользоваться какой то конкретной реализацией SQL — например, MySQL, PostgreSQL или MSSQL.
В PostgreSQL полный запрос будет выглядеть так:
1 2 3 4 5 6 7 |
CREATE SEQUENCE users_id_seq; CREATE TABLE users ( id INT PRIMARY KEY DEFAULT nextval('users_id_seq'), name TEXT, email TEXT ); |
Отдельно объявляется т.н. последовательность (SEQUENCE), и потом она используется для столбца users.id
.
В MySQL это выглядит иначе:
1 2 3 4 5 |
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, -- автоувеличение для MySQL name VARCHAR(100), email VARCHAR(100) ); |