HTML Diff
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>