
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! 😉