Example
CREATE TABLE (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY(id),
... );
Main notes:
- Starts with 1 and increments by 1 automatically when you fail to specify it on
INSERT
, or specify it as NULL
.
- The ids are always distinct from each other, but...
- Do not make any assumptions (no gaps, consecutively generated, not reused, etc) about the values of the id other than being unique at any given instant.
Subtle notes:
- On restart of server, the 'next' value is 'computed' as
MAX(id)+1
.
- If the last operation before shutdown or crash was to delete the highest id, that id may be reused (this is engine-dependent). So, do not trust auto_increments to be permanently unique; they are only unique at any moment.
- For multi-master or clustered solutions, see
auto_increment_offset
and auto_increment_increment
.
- It is OK to have something else as the
PRIMARY KEY
and simply do INDEX(id)
. (This is an optimization in some situations.)
- Using the
AUTO_INCREMENT
as the "PARTITION
key" is rarely beneficial; do something different.
- Various operations may "burn" values. This happens when they pre-allocate value(s), then don't use them:
INSERT IGNORE
(with dup key), REPLACE
(which is DELETE
plus INSERT
) and others. ROLLBACK
is another cause for gaps in ids.
- In Replication, you cannot trust ids to arrive at the slave(s) in ascending order. Although ids are assigned in consecutive order, InnoDB statements are sent to slaves in
COMMIT
order.