Что такое последовательность (база данных)? Когда нам это понадобится? - PullRequest
35 голосов
/ 30 октября 2009

Зачем нам создавать последовательность, даже если есть первичный ключ?

Ответы [ 3 ]

45 голосов
/ 30 октября 2009

Первичный ключ - это столбец в таблице.

Первичному ключу нужно уникальное значение, которое должно откуда-то прийти.

Последовательность является функцией некоторых продуктов баз данных, которая просто создает уникальные значения. Он просто увеличивает значение и возвращает его. Особенность этого заключается в том, что нет изоляции транзакций, поэтому несколько транзакций не могут получить одно и то же значение, приращение также не откатывается. Без последовательности базы данных очень трудно генерировать уникальные увеличивающиеся числа.

Другие продукты баз данных поддерживают столбцы, которые автоматически инициализируются с возрастающим номером.

Существуют и другие способы создания уникальных значений для первичных ключей, например Guids.

7 голосов
/ 30 октября 2009

Первичный ключ (в техническом плане) - это просто индекс, который обеспечивает уникальность (а также ускоряет выполнение запросов). Там есть некоторая семантическая информация, которая является «ключом» для сущности, которую описывает строка, но это все.

Последовательность - это совершенно другая сущность; он существует отдельно от таблиц (как хранимая процедура) и может вызываться для получения последовательных чисел.

Эти два часто используются вместе, чтобы генерировать автоматические первичные ключи для сущностей, у которых нет разумных "родных" ключей. Но это две разные концепции; у вас могут быть таблицы, в которых первичный ключ заполняется явно во время вставки, и у вас могут быть последовательности, которые используются для заполнения столбцов не-PK (или даже обязательного использования во время хранимой процедуры, отличной от вставки записей).

6 голосов
/ 30 октября 2009

Последовательность позволит вам заполнить первичный ключ уникальным сериализованным номером.

Он отличается от serial или auto_incremement первичного ключа в том смысле, что:

  • Это фактический объект базы данных (вам нужно его создать):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • Вы можете назначать независимые разрешения для разных пользователей базы данных:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Вы можете использовать, чтобы иметь уникальный номер, который отличается в нескольких таблицах (не только в одной). Скажем, у вас есть четыре таблицы с числовыми первичными ключами, и вы хотите уникальные числа среди этих четырех таблиц. Вы можете использовать последовательность для этого, не беспокоясь о реализации механизмов блокировки, чтобы сделать это «вручную».

  • Вы можете изменить его номер на любое значение с помощью alter sequence

  • Вы можете переключаться по его номерам

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...