MySQL AUTO_INCREMENT attribute explained

The auto increment mechanism is a feature in SQL type database that allows you to automatically generate a unique number as a value for your column when you perform an INSERT statement.

The mechanism can be added to your MySQL table column by adding the AUTO_INCREMENT attribute to the column definition of the CREATE TABLE statement.

In the following example, AUTO_INCREMENT attribute is added to the student_id column of the students table:

CREATE TABLE students (
  student_id MEDIUMINT NOT NULL AUTO_INCREMENT,
  first_name CHAR(30) NOT NULL,
  PRIMARY KEY (student_id)
);

The AUTO_INCREMENT attribute is added next to the NOT NULL attribute in the example above.

Please note that the AUTO_INCREMENT attribute only works for integer data type. Adding the auto increment feature to columns with other data types will cause the Incorrect column specifier error as shown below:

mysql> CREATE TABLE students (
    ->      student_id CHAR(30) NOT NULL AUTO_INCREMENT,
    ->      first_name CHAR(30) NOT NULL,
    ->      PRIMARY KEY (student_id)
    -> );
ERROR 1063 (42000): Incorrect column specifier for column 'student_id'

Each time you INSERT a new value to the students table, the student_id column value will be incremented automatically.

Let’s execute some INSERT statements as an example:

INSERT INTO students (first_name) VALUE ("Chris"); 
INSERT INTO students (first_name) VALUE ("Jack"); 
INSERT INTO students (first_name) VALUE ("Sarah"); 

Now run a SELECT statement to retrieve the records stored in students table.

The table content would be as follows:

+-------------+------------+
| student_id | first_name |
+-------------+------------+
|           1 | Chris      |
|           2 | Jack       |
|           3 | Sarah      |
+-------------+------------+

As you can see, the student_id value is automatically generated by MySQL. It starts from the number 1 and incremented by 1 each time you insert a new row.

You can also put NULL value for the auto increment column as shown below:

INSERT INTO students (student_id, first_name) VALUE (NULL, "Helen"); 

The student_id column will automatically adjust the value from NULL to the next sequential value in your table.

You can change the initial value from 1 into any other number by adding the AUTO_INCREMENT = syntax by the end of your CREATE TABLE statement as shown below:

CREATE TABLE students (
  student_id MEDIUMINT NOT NULL AUTO_INCREMENT,
  first_name CHAR(30) NOT NULL,
  PRIMARY KEY (student_id)
) AUTO_INCREMENT=1000;

Or if you already have the table, you can use the ALTER TABLE statement to change the initial value:

ALTER TABLE students AUTO_INCREMENT = 1000;

Now run the INSERT statements again:

INSERT INTO students (first_name) VALUE ("Eric"); 
INSERT INTO students (first_name) VALUE ("Anna"); 
INSERT INTO students (first_name) VALUE ("Mary"); 

This time the student_id value will start from 1000 as you can see below:

+-------------+------------+
| student_id | first_name |
+-------------+------------+
|           1 | Chris      |
|           2 | Jack       |
|           3 | Sarah      |
|        1000 | Eric       |
|        1001 | Anna       |
|        1002 | Mary       |
+-------------+------------+

And that’s how you can add the AUTO_INCREMENT attribute to a MySQL column. Next, let’s see how you can increase the increment value for each new record.

Increasing AUTO_INCREMENT incremental value

The increment value of a column with AUTO_INCREMENT attribute is controlled by MySQL through the auto_increment_increment global variable.

You can find the variable in your MySQL database by executing SHOW VARIABLES query as follows:

SHOW VARIABLES LIKE 'auto_increment_increment';

By default, the auto_increment_increment value should be 1, which means your AUTO_INCREMENT column value should go up by 1 each time you perform an INSERT statement.

Here’s the result on my local server:

mysql> SHOW VARIABLES LIKE 'auto_increment_increment';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
+--------------------------+-------+
1 row in set (0.01 sec)

Let’s set the auto_increment_increment value to 10 using the SET GLOBAL VARIABLE statement as shown below:

SET GLOBAL auto_increment_increment=10;

Now each INSERT statement will cause the column with AUTO_INCREMENT attribute to leap by 10 instead of 1.

In the example below, the student_id column jumped from 1 to 11:

+-------------+------------+
| student_id | first_name |
+-------------+------------+
|           1 | Joan       |
|          11 | Eddy       |
+-------------+------------+

You’ve just learned about MySQL’s auto increment feature and how you can change the increment value by changing the auto_increment_increment variable value. Nice work! 😉

More MySQL tutorials

See all