PDF (A4) - 35.2Mb
Man Pages (TGZ) - 256.4Kb
Man Pages (Zip) - 361.2Kb
Info (Gzip) - 3.4Mb
Info (Zip) - 3.4Mb
MySQL Globalization
MySQL Information Schema
MySQL Installation Guide
MySQL and Linux/Unix
MySQL and macOS
MySQL Partitioning
MySQL Performance Schema
MySQL Replication
Using the MySQL Yum Repository
MySQL Restrictions and Limitations
Security in MySQL
MySQL and Solaris
Building MySQL from Source
Starting and Stopping MySQL
MySQL Tutorial
MySQL and Windows
MySQL NDB Cluster 7.5
TheAUTO_INCREMENT attribute can be used to generate a unique identity for new rows:
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 |+----+---------+ No value was specified for theAUTO_INCREMENT column, so MySQL assigned sequence numbers automatically. You can also explicitly assign 0 to the column to generate sequence numbers, unless theNO_AUTO_VALUE_ON_ZERO SQL mode is enabled. For example:
INSERT INTO animals (id,name) VALUES(0,'groundhog'); If the column is declaredNOT NULL, it is also possible to assignNULL to the column to generate sequence numbers. For example:
INSERT INTO animals (id,name) VALUES(NULL,'squirrel'); When you insert any other value into anAUTO_INCREMENT column, the column is set to that value and the sequence is reset so that the next automatically generated value follows sequentially from the largest column value. For example:
INSERT INTO animals (id,name) VALUES(100,'rabbit');INSERT INTO animals (id,name) VALUES(NULL,'mouse');SELECT * FROM animals;+-----+-----------+| id | name |+-----+-----------+| 1 | dog || 2 | cat || 3 | penguin || 4 | lax || 5 | whale || 6 | ostrich || 7 | groundhog || 8 | squirrel || 100 | rabbit || 101 | mouse |+-----+-----------+ Updating an existingAUTO_INCREMENT column value in anInnoDB table does not reset theAUTO_INCREMENT sequence as it does forMyISAM andNDB tables.
You can retrieve the most recent automatically generatedAUTO_INCREMENT value with theLAST_INSERT_ID() SQL function or themysql_insert_id() C API function. These functions are connection-specific, so their return values are not affected by another connection which is also performing inserts.
Use the smallest integer data type for theAUTO_INCREMENT column that is large enough to hold the maximum sequence value you need. When the column reaches the upper limit of the data type, the next attempt to generate a sequence number fails. Use theUNSIGNED attribute if possible to allow a greater range. For example, if you useTINYINT, the maximum permissible sequence number is 127. ForTINYINT UNSIGNED, the maximum is 255. SeeSection 11.1.2, “Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT” for the ranges of all the integer types.
For a multiple-row insert,LAST_INSERT_ID() andmysql_insert_id() actually return theAUTO_INCREMENT key from thefirst of the inserted rows. This enables multiple-row inserts to be reproduced correctly on other servers in a replication setup.
To start with anAUTO_INCREMENT value other than 1, set that value withCREATE TABLE orALTER TABLE, like this:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100; For information aboutAUTO_INCREMENT usage specific toInnoDB, seeSection 14.6.1.6, “AUTO_INCREMENT Handling in InnoDB”.
For
MyISAMtables, you can specifyAUTO_INCREMENTon a secondary column in a multiple-column index. In this case, the generated value for theAUTO_INCREMENTcolumn is calculated asMAX(. This is useful when you want to put data into ordered groups.auto_increment_column) + 1 WHERE prefix=given-prefixCREATE 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 |+--------+----+---------+In this case (when the
AUTO_INCREMENTcolumn is part of a multiple-column index),AUTO_INCREMENTvalues are reused if you delete the row with the biggestAUTO_INCREMENTvalue in any group. This happens even forMyISAMtables, for whichAUTO_INCREMENTvalues normally are not reused.If the
AUTO_INCREMENTcolumn is part of multiple indexes, MySQL generates sequence values using the index that begins with theAUTO_INCREMENTcolumn, if there is one. For example, if theanimalstable contained indexesPRIMARY KEY (grp, id)andINDEX (id), MySQL would ignore thePRIMARY KEYfor generating sequence values. As a result, the table would contain a single sequence, not a sequence pergrpvalue.
More information aboutAUTO_INCREMENT is available here:
How to assign the
AUTO_INCREMENTattribute to a column:Section 13.1.18, “CREATE TABLE Statement”, andSection 13.1.8, “ALTER TABLE Statement”.How
AUTO_INCREMENTbehaves depending on theNO_AUTO_VALUE_ON_ZEROSQL mode:Section 5.1.10, “Server SQL Modes”.How to use the
LAST_INSERT_ID()function to find the row that contains the most recentAUTO_INCREMENTvalue:Section 12.15, “Information Functions”.Setting the
AUTO_INCREMENTvalue to be used:Section 5.1.7, “Server System Variables”.AUTO_INCREMENTand replication:Section 16.4.1.1, “Replication and AUTO_INCREMENT”.Server-system variables related to
AUTO_INCREMENT(auto_increment_incrementandauto_increment_offset) that can be used for replication:Section 5.1.7, “Server System Variables”.
PDF (A4) - 35.2Mb
Man Pages (TGZ) - 256.4Kb
Man Pages (Zip) - 361.2Kb
Info (Gzip) - 3.4Mb
Info (Zip) - 3.4Mb
MySQL Globalization
MySQL Information Schema
MySQL Installation Guide
MySQL and Linux/Unix
MySQL and macOS
MySQL Partitioning
MySQL Performance Schema
MySQL Replication
Using the MySQL Yum Repository
MySQL Restrictions and Limitations
Security in MySQL
MySQL and Solaris
Building MySQL from Source
Starting and Stopping MySQL
MySQL Tutorial
MySQL and Windows
MySQL NDB Cluster 7.5