Простой способ создать автоинкрементное поле в базе данных Firebird

есть ли простой способ создать поле автоматического приращения с помощью Firebird? Я установил инструмент администрирования FlameRobin, но процесс создания поля автоматического приращения через инструмент сложен. Не могу ли я создать такое поле идентификации, просто щелкнув флажок или используя какой-либо другой инструмент, кроме Flamerobin?

1 ответов


Firebird 2.5 и раньше нет автоинкрементных полей. Вам нужно создать их самостоятельно с помощью последовательности (он же генератор) и триггера.

последовательность-это стандартный термин SQL, а генератор-исторический термин Firebird, они оба используются.

до создать последовательность:

CREATE SEQUENCE t1_id_sequence;

чтобы создать триггер, чтобы всегда генерировать идентификатор в таблице T1 первичного ключа ID:

set term !! ;
CREATE TRIGGER T1_AUTOINCREMENT FOR T1
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  NEW.ID = next value for t1_id_sequence;
END!!
set term ; !!

Читайте также: как чтобы создать столбец autoincrement?

Firebird 3 делает это немного проще, так как он вводит столбцы идентификаторов. На практике это синтаксический сахар для генерации последовательности + триггер для вас.

create table t1 (
   id integer generated by default as identity primary key
)

Firebird 3 поддерживает только"generated by default", что означает, что пользователи могут указать свои собственные значения id (что может привести к дублированию ошибок значений);"generated always " будет добавлен Firebird 4.

Смотрите также примечания к выпуску Firebird 3 в разделе "Тип Столбца Идентификации".

Flamerobin также предоставляет инструменты для создания последовательности + триггер для вас. Если у вас есть существующая таблица, вы можете выполнить следующие действия:

  1. откройте свойства таблицы:

    open table properties

  2. откройте свойства столбца первичного ключа колонка

    open column properties

  3. свойства столбца по умолчанию, выберите новый генератор и создать триггер:

    default column properties

  4. генератор (последовательность) и код триггера, генерируемый flamerobin. Обратите внимание, что в отличие от моего примера выше этот триггер позволяет пользователю указать свое собственное значение id, с некоторой логикой, чтобы избежать будущих дубликатов. Выполните это (и не забудьте совершить):

    generated code for generator + trigger