1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Ранее мы создавали идентификаторы вручную. Так можно делать в учебных целях, но в реальной жизни эту задачу берут на себя СУБД. За это отвечает механизм автогенерации. В этом уроке мы рассмотрим основной принцип этого механизма, а также разберем, что такое первичный ключ и как он помогает идентифицировать строки.</p>
1
<p>Ранее мы создавали идентификаторы вручную. Так можно делать в учебных целях, но в реальной жизни эту задачу берут на себя СУБД. За это отвечает механизм автогенерации. В этом уроке мы рассмотрим основной принцип этого механизма, а также разберем, что такое первичный ключ и как он помогает идентифицировать строки.</p>
2
<h2>Первичный ключ</h2>
2
<h2>Первичный ключ</h2>
3
<p><strong>Первичный ключ</strong>однозначно идентифицирует каждую запись внутри таблицы. Задается с помощью фразы PRIMARY KEY, которая добавляется после указания типа, когда создается таблица. Первичный ключ в таблице может быть только один, и для него используется отдельное поле -- идентификатор, у которого нет физического смысла:</p>
3
<p><strong>Первичный ключ</strong>однозначно идентифицирует каждую запись внутри таблицы. Задается с помощью фразы PRIMARY KEY, которая добавляется после указания типа, когда создается таблица. Первичный ключ в таблице может быть только один, и для него используется отдельное поле -- идентификатор, у которого нет физического смысла:</p>
4
<p><a>View on DBFiddle</a></p>
4
<p><a>View on DBFiddle</a></p>
5
<p>Если вставить новую запись со значением, которое уже есть в колонке с первичным ключом, то запрос не выполнится.</p>
5
<p>Если вставить новую запись со значением, которое уже есть в колонке с первичным ключом, то запрос не выполнится.</p>
6
<h2>Автогенерация первичного ключа</h2>
6
<h2>Автогенерация первичного ключа</h2>
7
<p>Первичный ключ в базах данных принято заполнять автоматически, используя встроенные в базу данных возможности. Такой подход лучше ручного заполнения по двум причинам. Во-первых, это просто реализовать. Во-вторых, база данных сама следит за уникальностью во время генерации.</p>
7
<p>Первичный ключ в базах данных принято заполнять автоматически, используя встроенные в базу данных возможности. Такой подход лучше ручного заполнения по двум причинам. Во-первых, это просто реализовать. Во-вторых, база данных сама следит за уникальностью во время генерации.</p>
8
<p>Автогенерация работает по следующим принципам:</p>
8
<p>Автогенерация работает по следующим принципам:</p>
9
<ol><li>Внутри базы создается отдельный счетчик, который привязывается к каждой таблице.</li>
9
<ol><li>Внутри базы создается отдельный счетчик, который привязывается к каждой таблице.</li>
10
<li>Счетчик увеличивается на единицу при вставке новой строки.</li>
10
<li>Счетчик увеличивается на единицу при вставке новой строки.</li>
11
<li>Получившееся значение записывается в поле, которое помечается как автогенерируемое.</li>
11
<li>Получившееся значение записывается в поле, которое помечается как автогенерируемое.</li>
12
-
</ol><p>Автогенерацию первичного ключа часто называют автоинкрементом (autoincrement). Что переводится как<em>автоматическое увеличение</em>и напоминает операцию инкремента из программирования<em>{plus}{plus}</em>.</p>
12
+
</ol><p>Автогенерацию первичного ключа часто называют автоинкрементом (autoincrement). Что переводится как<em>автоматическое увеличение</em>и напоминает операцию инкремента из программирования ++.</p>
13
<p>Такой автоинкремент создается с помощью<strong>GENERATED ALWAYS AS IDENTITY</strong>:</p>
13
<p>Такой автоинкремент создается с помощью<strong>GENERATED ALWAYS AS IDENTITY</strong>:</p>
14
<p>Основной ключ и автоинкремент часто используются вместе:</p>
14
<p>Основной ключ и автоинкремент часто используются вместе:</p>
15
<p><a>View On DBFiddle</a></p>
15
<p><a>View On DBFiddle</a></p>
16
<p>Если удалить запись с id равным двум и вставить еще одну запись, то значением поля id будет 4.</p>
16
<p>Если удалить запись с id равным двум и вставить еще одну запись, то значением поля id будет 4.</p>
17
<p><a>View On DBFiddle</a></p>
17
<p><a>View On DBFiddle</a></p>
18
<p>Автогенерация не связана с данными в таблице. Это отдельный счетчик, который всегда увеличивается. Так избегаются вероятные коллизии и ошибки, когда один и тот же идентификатор принадлежит сначала одной записи, а потом другой.</p>
18
<p>Автогенерация не связана с данными в таблице. Это отдельный счетчик, который всегда увеличивается. Так избегаются вероятные коллизии и ошибки, когда один и тот же идентификатор принадлежит сначала одной записи, а потом другой.</p>
19
<p>Вот его сигнатура из документации:</p>
19
<p>Вот его сигнатура из документации:</p>
20
<ul><li>Тип данных может быть<em>SMALLINT</em>,<em>INT</em>или<em>BIGINT</em></li>
20
<ul><li>Тип данных может быть<em>SMALLINT</em>,<em>INT</em>или<em>BIGINT</em></li>
21
<li>GENERATED ALWAYS -- не позволит добавлять значение самостоятельно, используя UPDATE или INSERT</li>
21
<li>GENERATED ALWAYS -- не позволит добавлять значение самостоятельно, используя UPDATE или INSERT</li>
22
<li>GENERATED BY DEFAULT -- в отличие от предыдущего варианта, этот вариант позволяет добавлять значения самостоятельно</li>
22
<li>GENERATED BY DEFAULT -- в отличие от предыдущего варианта, этот вариант позволяет добавлять значения самостоятельно</li>
23
</ul><p>PostgreSQL позволяет иметь более одного автогенерируемого поля на таблицу.</p>
23
</ul><p>PostgreSQL позволяет иметь более одного автогенерируемого поля на таблицу.</p>
24
<p>Ниже пример создания таблицы с помощью GENERATED BY DEFAULT AS IDENTITY</p>
24
<p>Ниже пример создания таблицы с помощью GENERATED BY DEFAULT AS IDENTITY</p>
25
<p><a>View On DBFiddle</a></p>
25
<p><a>View On DBFiddle</a></p>
26
<h2>Выводы</h2>
26
<h2>Выводы</h2>
27
<p>В этом уроке мы узнали про первичные ключи. Использование первичных ключей в SQL помогает обеспечить целостность данных в базе. Первичные ключи помогают уникально идентифицировать записи в таблице.</p>
27
<p>В этом уроке мы узнали про первичные ключи. Использование первичных ключей в SQL помогает обеспечить целостность данных в базе. Первичные ключи помогают уникально идентифицировать записи в таблице.</p>
28
<p>Механизм автоинкремента позволяет автоматически увеличивать значения ключей при каждой новой записи, что делает его простым в использовании и предотвращает возможные конфликты и ошибки.</p>
28
<p>Механизм автоинкремента позволяет автоматически увеличивать значения ключей при каждой новой записи, что делает его простым в использовании и предотвращает возможные конфликты и ошибки.</p>