Атрибут 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");
SELECT * FROM animals;
Что вернет:
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | +----+---------+
Вы можете получить AUTO_INCREMENT ключ с помощью функции SQL LAST_INSERT_ID() или
с помощью функции mysql_insert_id() интерфейса C.
Для многострочной вставки, LAST_INSERT_ID()/mysql_insert_id() на самом деле вернут
AUTO_INCREMENT значение для первой вставленной записи. Это сделано для того, чтобы
многострочные вставки можно было повторить на других серверах.
В таблицах MyISAM и BDB можно определить AUTO_INCREMENT для вторичного
столбца составного ключа. В этом случае значение, генерируемое для
автоинкрементного столбца, вычисляется как
MAX(auto_increment_column)+1) WHERE prefix=given-prefix. Столбец с
атрибутом AUTO_INCREMENT удобно использовать, когда данные нужно помещать
в упорядоченные группы.
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)
);
INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"),
("bird","penguin"),("fish","lax"),("mammal","whale");
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 | +--------+----+---------+
Обратите внимание, что в этом случае значение AUTO_INCREMENT будет
использоваться повторно, если в какой-либо группе удаляется строка,
содержащая наибольшее значение AUTO_INCREMENT.