Шрифт:
* Операции сортировки. По умолчанию запрос возвращает строки точно в том порядке, в котором находит их в таблице, т. е., скорее всего, неупорядоченные. Вы можете отсортировать строки по значениям целочисленных столбцов, используя предложение ORDER BY оператора SELECT В убывающем или возрастающем порядке. Если числа сохраняются как символьные типы, то порядок сортировки будет алфавитно-цифровым, а не числовым, например, 1 - 10 - 11 ... 19 - 2.
Целые типы
Все целые типы являются точными знаковыми числами с нулевым масштабом. Firebird поддерживает три вида разной точности целых типов данных:
* SMALLINT - является знаковым коротким целым с диапазоном от -32,768 до 32,767;
* INTEGER - является знаковым длинным целым с диапазоном от-2 147 483 648 до 2 147 483 647;
* BIGINT - является знаковым 64-битовым целым с диапазоном от 2(^63^) до 2(^63^) - 1. Недоступен в диалекте 1.
! ! !
ПРИМЕЧАНИЕ. В Firebird 1.0.x в диалекте 3 объявляйте 64-битовые целые как NUMERIC(18,0) или DECIMAL (18,0). Всегда допустимо использование этого синтаксиса для целых типов, при этом можно опускать второй аргумент (масштаб).
. ! .
Более подробную информацию о масштабе, точности и операциях, которые могут выполняться для чисел с фиксированной точкой, см. далее в разд. "Масштабируемые типы с фиксированной точкой".
Следующие два оператора создают домен и столбец, соответственно, с типами данных SMALLINT и INTEGER:
CREATE DOMAIN RGB_RED_VALUE AS SMALLINT;
/* */
CREATE TABLE STUDENT_ROLL (
STUDENT_ID INTEGER,
. . . );
Каждый из следующих операторов создает домен, который является 64-битовым целым:
CREATE DOMAIN IDENTITY BIGINT CHECK(VALUE >=0);
/* Firebird 1.5 и выше */
CREATE DOMAIN IDENTITY NUMERIC(18,0) CHECK(VALUE >=0);
SMALLINT
SMALLINT является 2-байтовым целым, предоставляющим компактное хранение для целых чисел с ограниченным диапазоном значений. Например, SMALLINT может быть подходящим для хранения значений цветов в форме RGB, как показано в предыдущем примере создания домена.
SMALLINT часто используется для определения булевых значений, обычно 0 = ложь, 1 = истина. Пример такого использования можно найти в разд. "Объявление булевых доменов" главы 13.
INTEGER
INTEGER является 4-байтовым целым. В диалекте 1 генераторы (см. разд. "Генераторы" этой главы) генерируют значения типа INTEGER. Вы можете хранить такие целые в столбцах BIGINT без преобразования.
BIGINT, NUMERIC(18,0)
Доступны только в диалекте 3. Это 8-байтовое целое, полезное для хранения целых чисел с очень маленькими и очень большими значениями. В диалекте 3 генерируются числа типа BIGINT (см. разд. "Генераторы").
Автоинкремент или тип IDENTITY
Firebird не поддерживает типы автоинкремента или IDENTITY, которые вы могли встретить в других системах управления базами данных. Что у него есть, так это средство числовых генераторов и возможность поддерживать независимые, именованные серии чисел BIGINT. Каждая серия известна как генератор. Техника их использования для реализации и поддержки первичных ключей и других автоматических инкрементных серий описана в главе 31.
Генераторы
Генераторы являются идеальным средством для создания значений автоинкрементных уникальных ключей или серий значений числового столбца, а также других серий. Генераторы в базе данных объявляются оператором CREATE, как и любой другой объект базы данных:
CREATE GENERATOR AGenerator;
Генераторам может быть присвоено любое начальное значение:
SET GENERATOR AGenerator ТО 1;
! ! !
ВНИМАНИЕ! Существуют строгие предупреждения по поводу переустановки значений генераторов, когда эти значения находятся в использовании - см. разд. "Предупреждения о переустановке значений генераторов" в этой главе.
. ! .
Для получения следующего значения вызывайте функцию SQL GEN_ID(ИмяГенератора, n), где имягенератора - имя генератора, а n - целое (диалект 1) или NUMERIC(18,0) (диалект 3), определяющее значение шага. Запрос:
SELECT GEN_ID(AGenerator, 2) from RDB$DATABASE;
возвращает число, которое на 2 больше последнего сгенерированного числа, и устанавливает значение генератора в сгенерированное значение.