Атрибут 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
.