Создание столбцов идентификаторов

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

Столбцы идентификаторы ведут себя следующим образом.

  • Добавление пустого значения в столбец идентификатор приведет к добавлению в данном столбце следующего по счету номера в новой строке.
  • При добавлении новой записи с явно указанным значением в столбце идентификаторе произойдет одно из двух. Если запись с таким значением уже в таблице существует, генерируется сообщение об ошибке, так как значения в этом столбце должны быть уникальны. Если строка с таким значением отсутствует, новое значение станет новым максимумом последовательности.
  • Значения в автоматически генерируемых последовательностях являются строго возрастающими и не могут использоваться повторно. Если текущее максимальное значение составляет 143 и запись, содержащая это значение, была удалена, следующее генерируемое значение будет 144.
  • Диапазон значений столбца идентификатора подчиняется законам диапазона значений для типа, с которым объявлен данный столбец. Например, столбец типа TINYINT UNSIGNED будет иметь максимальное значение 255. По достижению этого значения счетчиком, будет выдаваться сообщение об ошибке "повторение ключа" ("duplicate error").

MS SQL Server

В MS SQL Server столбец идентификатор создается с помощью атрибута IDENTITY в описании столбца:

column_definition ::=
column_name
[ NULL | NOT NULL ][DEFAULT constant_expression ] [ IDENTITY [( seed ,increment ) ]]

При добавлении в таблицу новой строки компонент Database Engine формирует для этого столбца последовательное уникальное значение.

Для каждой таблицы можно создать только один столбец идентификаторов. При создании столбца можно указать как начальное значение (параметр seed в описании столбца), так и приращение (параметр increment в описании столбца). Если эти параметры не указаны, применяются значения по умолчанию (1,1).

MySQL Server

MySQL Server поле-счетчик создается с помощью атрибута AUTO_INCREMENТ в описании столбца:

column_defenition::=
col_name data_type [NOT NULL | NULL] [DEFAULT default_value] AUTO_INCREMENT

Столбец должен быть объявлен как NOT NULL и UNSIGNED, а также быть либо первичным ключом либо уникальным индксом.

Существует возможность явного задания начального значения последовательности в момент создания таблицы. Пример создания столбца AUTO_INCREMENT, начальное значение последовательности которой равно 1000000:

CREATE TABLE my_table
(id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY)
AUTOINCREMENT = 1000000