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 с 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, ако има такава. Например, ако таблицата с животни съдържа индекси 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 може да срещне грешка „Дублиращ запис“. Тестът дали вече е налице стойност за автоматично увеличение се извършва, ако направите DELETE, последвано от повече оператори INSERT, или когато COMMIT транзакцията, но не и след оператор UPDATE.
MyISAM Бележки
За 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, „СИНТАксиС НА СЪЗДАВАНЕ НА ТАБЛИЦА“ и Раздел 13.1.7, „СИНТАксиС НА ТАБЛИЦА ALTER“.
Как се държи 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 и репликация:Раздел 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