FirebirdSQL logo
 DOMAININDEX 

Значение по умолчанию

Необязательное предложение DEFAULT позволяет указать значение по умолчанию для столбца таблицы.Это значение будет помещено в столбец таблицы при выполнении оператора INSERT, если значение не будет указано для этого столбца.В качестве значения по умолчанию может быть литерал совместимый по типу, неизвестное значение NULL или контекстная переменная, тип которой совместим с типом столбца.Если значение по умолчанию явно не устанавливается, то подразумевается пустое значение, NULL.Использование выражений в значении по умолчанию недопустимо.

Столбцы основанные на домене

Для определения столбца, можно воспользоваться ранее описанным доменом.Если определение столбца основано на домене, оно может включать новое значение по умолчанию, дополнительные ограничения CHECK, предложение COLLATE, которые перекрывают значения указанные при определении домена.Определение такого столбца может включать дополнительные ограничения столбца, например NOT NULL, если домен его ещё не содержит.

Important

Следует обратить внимание на то, что если в определении домена было указано NOT NULL, на уровне столбца невозможно определить допустимость использования в нем значения NULL.Если вы хотите чтобы на основе домена можно было определять столбцы допускающие псевдозначение NULL и не допускающее его, то хорошей практикой является создание домена допускающего NULL и указание ограничения NOT NULL у столбцов таблицы там где это необходимо.

Столбцы идентификации (автоинкремент)

Столбец идентификации представляет собой столбец, связанный с внутренним генератором последовательностей.Столбцы идентификации могут быть определены либо с помощью предложения GENERATED BY DEFAULT AS IDENTITY, либо предложения GENERATED ALWAYS AS IDENTITY.

Если столбец идентификации задан как GENERATED BY DEFAULT, то его значение будет увеличиваться и использовано как значение по умолчанию при каждой вставке, только в том случае, если значение этого столбца не задано явно.

Чтобы использовать сгенерированное по умолчанию значение, необходимо либо указать ключевое слово DEFAULT при вставке в столбец идентификации, или просто не упоминать столбец идентификации в списке столбцов для вставки.В противном случае будет использовано указанное вами значение.

Example 1. Столбец определённый как GENERATED BY DEFAULT AS IDENTITY
CREATE TABLE greetings (
  id INT GENERATED BY DEFAULT AS IDENTITY,
  name CHAR(50));

-- specify value "1":
INSERT INTO greetings VALUES (1, 'hi');

-- use generated default
INSERT INTO greetings VALUES (DEFAULT, 'salut');

-- use generated default
INSERT INTO greetings(ch) VALUES ('bonjour');
Note

Это поведение может быть изменено в операторе INSERT если указана директива OVERRIDING USER VALUE.Подробнее см. Директива OVERRIDING.

Если столбец идентификации задан как GENERATED ALWAYS, то его значение будет увеличиваться при каждой вставке.При попытке явно присвоить значение столбца идентификации в операторе INSERT, будет выдано сообщение об ошибке.В операторе INSERT вы можете указать ключевое слово DEFAULT вместо значения для столбца идентификации.

create table greetings (
  id INT GENERATED ALWAYS AS IDENTITY,
  name CHAR(50));

INSERT INTO greetings VALUES (DEFAULT, 'hello');

INSERT INTO greetings(ch) VALUES ('bonjour');
Note

Это поведение может быть изменено в операторе INSERT если указана директива OVERRIDING SYSTEM VALUE.Подробнее см. Директива OVERRIDING.

Необязательное предложение START WITH позволяет указать начальное значение отличное от нуля.Предложение INCREMENT [BY] устанавливает значение приращения.Значение приращения должно быть отлично от 0.По умолчанию значение приращения равно 1.

Правила
  • Тип данных столбца идентификации должен быть целым числом с нулевым масштабом. Допустимыми типами являются SMALLINT, INTEGER, BIGINT, NUMERIC(x,0) и DECIMAL(x,0);

  • Идентификационный столбец не может иметь DEFAULT и COMPUTED значений.

Note
  • Идентификационный столбец может быть изменён, чтобы стать обычным столбцом. Обычный столбец не может быть изменён, чтобы стать идентификационным.

  • Идентификационные столбцы неявно являются NOT NULL столбцами.

  • Уникальность не обеспечивается автоматически. Ограничения UNIQUE или PRIMARY KEY требуются для гарантии уникальности.

См. также:

Директива OVERRIDING.

Вычисляемые поля

Вычисляемые поля могут быть определены с помощью предложения COMPUTED [BY] или GENERATED ALWAYS AS (согласно стандарту SQL-2003). Они эквивалентны по смыслу.Для вычисляемых полей не требуется описывать тип данных (но допустимо), СУБД вычисляет подходящий тип в результате анализа выражения.В выражении требуется указать корректную операцию для типов данных столбцов, входящих в его состав.При явном указании типа столбца для вычисляемого поля результат вычисления приводится к указанному типу, то есть, например, результат числового выражения можно вывести как строку.Вычисление выражения происходит для каждой строки выбранных данных, если в операторе выборки данных SELECT, присутствует такой столбец.

Tip

Вместо использования вычисляемого столбца в ряде случаев имеет смысл использовать обычный столбец, значение которого рассчитывается в триггерах на добавление и обновление данных.Это может снизить производительность вставки/модификации записей, но повысит производительность выборки данных.