http://docs.oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html
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;
Which returns:
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
+----+---------+
Не указано значение для столбца AUTO_INCREMENT,поэтому MySQL присваивает порядковые номера автоматически.Вы также можете явно присвоить NULL или 0 столбцу для генерации порядковых номеров.
Вы можете получить самое последнее значение AUTO_INCREMENT с помощью функции SQL LAST_INSERT_ID () или API-функции mysql_insert_id () C.Эти функции зависят от соединения, поэтому на их возвращаемые значения не влияет другое соединение, которое также выполняет вставки.
Используйте наименьший целочисленный тип данных для столбца 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, если естьэто один.Например, если таблица животных содержит индексы 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 может столкнуться с ошибкой «Duplicate entry».Проверка того, присутствует ли уже значение автоинкремента, выполняется, если вы выполняете команду DELETE, после которой следуют дополнительные операторы INSERT, или когда вы фиксируете транзакцию, но не после оператора UPDATE.
MyISAM Notes
Для таблиц MyISAM вы можете указать AUTO_INCREMENT для вторичного столбца в индексе из нескольких столбцов.В этом случае сгенерированное значение для столбца AUTO_INCREMENT рассчитывается как MAX (auto_increment_column) + 1 префикс WHERE = данный префикс.Это полезно, когда вы хотите поместить данные в упорядоченные группы.
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;
Which returns:
+--------+----+---------+
| 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 доступна здесь:
Как назначить атрибут AUTO_INCREMENTв столбец: Раздел 13.1.17, «Синтаксис CREATE TABLE» и Раздел 13.1.7, «Синтаксис ALTER TABLE».
Как ведет себя AUTO_INCREMENT в зависимости от режима SQL NO_AUTO_VALUE_ON_ZERO: Раздел 5.1.7, «Сервер»Режимы SQL ».
Как использовать функцию LAST_INSERT_ID (), чтобы найти строку, содержащую самое последнее значение AUTO_INCREMENT: Раздел 12.14,« Информационные функции ».
Установка значения AUTO_INCREMENT равнымИспользуется: Раздел 5.1.4, «Системные переменные сервера».
AUTO_INCREMENT и repссылка: Раздел 16.4.1.1, «Репликация и AUTO_INCREMENT».
Системные переменные сервера, связанные с AUTO_INCREMENT (auto_increment_increment и auto_increment_offset), которые можно использовать для репликации: раздел 5.1.4, «Системные переменные сервера».
http://search.oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0