Spec-Zone .ru
спецификации, руководства, описания, API

3.6.9. Используя AUTO_INCREMENT

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

CREATE TABLE animals (     id MEDIUMINT NOT NULL AUTO_INCREMENT,     name CHAR(30) NOT NULL,     PRIMARY KEY (id));INSERT INTO animals (name) VALUES    ('dog'),('cat'),('penguin'),    ('lax'),('whale'),('ostrich');SELECT * FROM animals;

Который возвращается:

+----+---------+| id | name    |+----+---------+|  1 | dog     ||  2 | cat     ||  3 | penguin ||  4 | lax     ||  5 | whale   ||  6 | ostrich |+----+---------+

Никакое значение не было определено для AUTO_INCREMENT столбец, таким образом, MySQL присвоенные порядковые номера автоматически. Можно также явно присвоиться NULL или 0 к столбцу, чтобы генерировать порядковые номера.

Можно получить новое AUTO_INCREMENT значение с LAST_INSERT_ID() Функция SQL или mysql_insert_id() C API-функция. Эти функции специфичны для соединения, таким образом, на их возвращаемые значения не влияет другое соединение, которое также выполняет, вставляет.

Используйте самый маленький целочисленный тип данных для AUTO_INCREMENT столбец, который является достаточно большим, чтобы содержать максимальное значение последовательности, в котором Вы будете нуждаться. Когда столбец достигает верхнего предела типа данных, следующая попытка генерировать порядковый номер сбои. Используйте UNSIGNED припишите если возможный, чтобы позволить больший диапазон. Например, если Вы используете TINYINT, максимальный допустимый порядковый номер 127. Для TINYINT UNSIGNED, максимум 255. См. Раздел 11.2.1, "Целочисленные Типы (Точное Значение) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"для диапазонов всех целочисленных типов.

Отметить

Поскольку многократная строка вставляет, LAST_INSERT_ID() и mysql_insert_id() фактически возвратитесь AUTO_INCREMENT ключ от первой из вставленных строк. Это включает многократной строке, вставляет, чтобы быть воспроизведенным правильно на других серверах в установке репликации.

Если AUTO_INCREMENT столбец является частью многократных, индексирует, MySQL генерирует значения последовательности, используя индексирование, которое начинается AUTO_INCREMENT столбец, если есть тот. Например, если animals содержавшая таблица индексирует PRIMARY KEY (grp, id) и INDEX (id), MySQL проигнорировал бы PRIMARY KEY для того, чтобы генерировать значения последовательности. В результате таблица содержала бы единственную последовательность, не последовательность на grp значение.

Запускаться с AUTO_INCREMENT значение кроме 1, устанавливает то значение с CREATE TABLE или ALTER TABLE, как это:

mysql> ALTER TABLE tbl AUTO_INCREMENT =
        100;

InnoDB Отмечает

Для InnoDB таблицы, быть осторожным, если Вы изменяете столбец, содержащий автоинкрементное значение в середине последовательности INSERT операторы. Например, если Вы используете UPDATE оператор, чтобы поместить новое, большее значение в столбец автоприращения, последующее INSERT мог встретиться с "Двойной записью" ошибка. Тест, присутствует ли автоинкрементное значение уже, происходит, если Вы делаете a DELETE сопровождаемый больше INSERT операторы, или когда Вы COMMIT транзакция, но не после UPDATE оператор.

MyISAM Отмечает

Для MyISAM таблицы, можно определить AUTO_INCREMENT на вторичном столбце в многократном столбце индексируют. В этом случае, сгенерированное значение для AUTO_INCREMENT столбец вычисляется как MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. Это полезно, когда Вы хотите поместить данные в упорядоченные группы.

CREATE TABLE animals (    grp ENUM('fish','mammal','bird') NOT NULL,    id MEDIUMINT NOT NULL AUTO_INCREMENT,    name CHAR(30) NOT NULL,    PRIMARY KEY (grp,id)) ENGINE=MyISAM;INSERT INTO animals (grp,name) VALUES    ('mammal','dog'),('mammal','cat'),    ('bird','penguin'),('fish','lax'),('mammal','whale'),    ('bird','ostrich');SELECT * FROM animals ORDER BY grp,id;

Который возвращается:

+--------+----+---------+| grp    | id | name    |+--------+----+---------+| fish   |  1 | lax     || mammal |  1 | dog     || mammal |  2 | cat     || mammal |  3 | whale   || bird   |  1 | penguin || bird   |  2 | ostrich |+--------+----+---------+

В этом случае (когда AUTO_INCREMENT столбец является частью многократного столбца, индексируют), AUTO_INCREMENT значения снова используются, если Вы удаляете строку с самым большим AUTO_INCREMENT значение в любой группе. Это происходит даже для MyISAM таблицы те, для который AUTO_INCREMENT значения обычно не снова используются.

Далее Чтение

Больше информации о AUTO_INCREMENT доступно здесь: