Простой способ создать автоинкрементное поле в базе данных 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 также предоставляет инструменты для создания последовательности + триггер для вас. Если у вас есть существующая таблица, вы можете выполнить следующие действия:
-
откройте свойства таблицы:
-
откройте свойства столбца первичного ключа колонка
-
свойства столбца по умолчанию, выберите новый генератор и создать триггер:
-
генератор (последовательность) и код триггера, генерируемый flamerobin. Обратите внимание, что в отличие от моего примера выше этот триггер позволяет пользователю указать свое собственное значение id, с некоторой логикой, чтобы избежать будущих дубликатов. Выполните это (и не забудьте совершить):