@GeneratedValue (стратегии = "IDENTITY") против @GeneratedValue (стратегии = "SEQUENCE") - PullRequest
33 голосов
/ 21 января 2012

Я новичок в спящем режиме. Я не понимаю следующие две стратегии генерации первичных ключей:

  1. Идентичность
  2. Последовательность

Может кто-нибудь объяснить, как эти два работают и в чем разница между этими двумя?

1 Ответ

58 голосов
/ 21 января 2012

Цитирование Сохранение Java / Идентичность и последовательность :

Identity секвенирование использует специальные столбцы IDENTITY в базе данных, чтобы позволить базе данных автоматически назначать идентификатор объекту при вставке его строки. Столбцы идентификации поддерживаются во многих базах данных, таких как MySQL, DB2, SQL Server, Sybase и Postgres . Oracle не поддерживает столбцы IDENTITY, но их можно моделировать с помощью объектов последовательности и триггеров.

Простым английским: вы помечаете не более одного ID столбца в вашей таблице как IDENTITY. Механизм базы данных автоматически выставит для вас значение следующее доступное .

И

Sequence объекты используют специальные объекты базы данных для генерации идентификаторов. Объекты последовательности поддерживаются только в некоторых базах данных, таких как Oracle, DB2 и Postgres . Обычно объект SEQUENCE имеет имя, INCREMENT и другие параметры объекта базы данных. Каждый раз, когда выбирается <sequence>.NEXTVAL, последовательность увеличивается на INCREMENT.

Последовательности более гибкие и немного более сложные. Вы определяете дополнительный объект в своей базе данных рядом с таблицами, триггерами и т. Д., Который называется sequence . Последовательности обычно называются счетчиком, который можно использовать в любом месте внутри запросов.

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