SQL
Теория: Первичный ключ и автоинкремент
Ранее мы создавали идентификаторы вручную. Так можно делать в учебных целях, но в реальной жизни эту задачу берут на себя СУБД. За это отвечает механизм автогенерации. В этом уроке мы рассмотрим основной принцип этого механизма, а также разберем, что такое первичный ключ и как он помогает идентифицировать строки.
Первичный ключ
Первичный ключ однозначно идентифицирует каждую запись внутри таблицы. Задается с помощью фразы PRIMARY KEY, которая добавляется после указания типа, когда создается таблица. Первичный ключ в таблице может быть только один, и для него используется отдельное поле -- идентификатор, у которого нет физического смысла:
Если вставить новую запись со значением, которое уже есть в колонке с первичным ключом, то запрос не выполнится.
Автогенерация первичного ключа
Первичный ключ в базах данных принято заполнять автоматически, используя встроенные в базу данных возможности. Такой подход лучше ручного заполнения по двум причинам. Во-первых, это просто реализовать. Во-вторых, база данных сама следит за уникальностью во время генерации.
Автогенерация работает по следующим принципам:
- Внутри базы создается отдельный счетчик, который привязывается к каждой таблице.
- Счетчик увеличивается на единицу при вставке новой строки.
- Получившееся значение записывается в поле, которое помечается как автогенерируемое.
Автогенерацию первичного ключа часто называют автоинкрементом (autoincrement). Что переводится как автоматическое увеличение и напоминает операцию инкремента из программирования {plus}{plus}.
Такой автоинкремент создается с помощью GENERATED ALWAYS AS IDENTITY:
Основной ключ и автоинкремент часто используются вместе:
Если удалить запись с id равным двум и вставить еще одну запись, то значением поля id будет 4.
Автогенерация не связана с данными в таблице. Это отдельный счетчик, который всегда увеличивается. Так избегаются вероятные коллизии и ошибки, когда один и тот же идентификатор принадлежит сначала одной записи, а потом другой.
Вот его сигнатура из документации:
- Тип данных может быть SMALLINT, INT или BIGINT
GENERATED ALWAYS-- не позволит добавлять значение самостоятельно, используяUPDATEилиINSERTGENERATED BY DEFAULT-- в отличие от предыдущего варианта, этот вариант позволяет добавлять значения самостоятельно
PostgreSQL позволяет иметь более одного автогенерируемого поля на таблицу.
Ниже пример создания таблицы с помощью GENERATED BY DEFAULT AS IDENTITY
Выводы
В этом уроке мы узнали про первичные ключи. Использование первичных ключей в SQL помогает обеспечить целостность данных в базе. Первичные ключи помогают уникально идентифицировать записи в таблице.
Механизм автоинкремента позволяет автоматически увеличивать значения ключей при каждой новой записи, что делает его простым в использовании и предотвращает возможные конфликты и ошибки.
.png)






















