400

How do I set the initial value for an "id" column in a MySQL table that start from 1001?

I want to do an insert "INSERT INTO users (name, email) VALUES ('{$name}', '{$email}')";

Without specifying the initial value for the id column.

0

11 Answers 11

683

Use this:

ALTER TABLE users AUTO_INCREMENT=1001;

or if you haven't already added an id column, also add it

ALTER TABLE users ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ADD INDEX (id);
Sign up to request clarification or add additional context in comments.

6 Comments

I realize this was 7 years ago, but... Can I get an explanation of this answer's parts? What does ADD INDEX do here? Do I have to add it in the same statement as the id column, or can I define the id column in the CREATE TABLE block and then ADD INDEX(id)?
Heh, time passes by... Sure, define it in CREATE TABLE if you are able to do that. The second "ALTER TABLE" part of answer implies that you have already created a table, and it is probably already deployed somewhere without proper index, which is required for first "ALTER TABLE" to work as intended. I hope this explanation helps.
Yes, that does help. I was looking at some samples that used these statements in a similar way, and they make more sense now. Thank you.
The reason for the ADD INDEX is because without it, if you already have a primary key on an existing table, you'll get there can be only one auto column and it must be defined as a key. You need the index so it will be a MUL key.
I tried this on a table that was just created without any rows added yet. Seems this does not work unless there has been atleast 1 row added to the table first.
|
79

MySQL - Setup an auto-incrementing primary key that starts at 1001:

Step 1, create your table:

create table penguins(
  my_id       int(16) auto_increment, 
  skipper     varchar(4000),
  PRIMARY KEY (my_id)
)

Step 2, set the start number for auto increment primary key:

ALTER TABLE penguins AUTO_INCREMENT=1001;

Step 3, insert some rows:

insert into penguins (skipper) values("We need more power!");
insert into penguins (skipper) values("Time to fire up");
insert into penguins (skipper) values("kowalski's nuclear reactor.");

Step 4, interpret the output:

select * from penguins

prints:

'1001', 'We need more power!'
'1002', 'Time to fire up'
'1003', 'kowalski\'s nuclear reactor'

2 Comments

How should i do if i want to set a id < 1000 for special penguins?
You can insert any free id, just put it in the column list: insert into penguins (my_id, skipper) values(999, "explicit id"); (when using 0 instead of 999 the auto increment value will be inserted)
36

MySQL Workbench

If you want to avoid writing sql, you can also do it in MySQL Workbench by right clicking on the table, choose "Alter Table ..." in the menu.

When the table structure view opens, go to tab "Options" (on the lower bottom of the view), and set "Auto Increment" field to the value of the next autoincrement number.

Don't forget to hit "Apply" when you are done with all changes.

PhpMyAdmin:

If you are using phpMyAdmin, you can click on the table in the lefthand navigation, go to the tab "Operations" and under Table Options change the AUTO_INCREMENT value and click OK.

4 Comments

Are you talking about phpMyAdmin?
No, I think he's talking about the MySQL Workbench.
@Saturnian, yes you are right, I meant the Workbench. I will edit my Post to clarify that.
phpMyAdmin solved an autoincrement issue in one step, I tried going the code route and it wasnt working.
24

With CREATE TABLE statement

CREATE TABLE my_table (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  PRIMARY KEY (id)
) AUTO_INCREMENT = 100;

or with ALTER TABLE statement

ALTER TABLE my_table AUTO_INCREMENT = 200;

3 Comments

hint, if you set it to 1 it will default to be just above the highest existing id
Good point / trick
Will it work even after the table has truncated? As the truncate operation leads to reset the auto increment value to 1.
15

First you need to add column for auto increment

alter table users add column id int(5) NOT NULL AUTO_INCREMENT FIRST

This query for add column at first. Now you have to reset auto increment initial value. So use this query

alter table users AUTO_INCREMENT=1001

Now your table started with 1001

Comments

13

You could also set it in the create table statement.

`CREATE TABLE(...) AUTO_INCREMENT=1000`

Comments

12

Alternatively, If you are too lazy to write the SQL query. Then this solution is for you. enter image description here

  1. Open phpMyAdmin
  2. Select desired Table
  3. Click on Operations tab
  4. Set your desired initial Value for AUTO_INCREMENT
  5. Done..!

Comments

9

For this you have to set AUTO_INCREMENT value

ALTER TABLE tablename AUTO_INCREMENT = <INITIAL_VALUE>

Example

ALTER TABLE tablename AUTO_INCREMENT = 101

Comments

5

Also , in PHPMyAdmin , you can select table from left side(list of tables) then do this by going there.
Operations Tab->Table Options->AUTO_INCREMENT.

Now, Set your values and then press Go under the Table Options Box.

Comments

1

SET GLOBAL auto_increment_offset=1;

SET GLOBAL auto_increment_increment=5;

auto_increment_increment: interval between successive column values

auto_increment_offset: determines the starting point for the AUTO_INCREMENT column value. The default value is 1.

read more here

Comments

1

Single statement on existing data (MySQL 8.0)

Assuming you already have an id column (of the default INT type[3]), here’s how to set it as the primary key with a next increment of 1001:

ALTER TABLE `users`

    -- 1. Set the auto-increment value, before anything uses it
    AUTO_INCREMENT=1001,
    
    -- 2. Set the column's default value, before it is constrained
    CHANGE COLUMN `id` 
        `id` INT
            NOT NULL AUTO_INCREMENT FIRST,
        
    -- 3. Add the constraint the MySQL way
    ADD PRIMARY KEY (`id`)
;

Notes

  1. If your id column contains a duplicate value, it should fail, throwing SQL error 1062, including a message telling you which value is duplicated.

  2. As others have noted, auto-increment will use the highest existing value + 1 by default. Explicitly setting a high auto-increment value is unnecessary if the only reason is to prevent duplicate values.

  3. If your id column is defined differently, know that the CHANGE COLUMN operation requires the whole column definition be entered, as though it were being created for the first time. Alter step 2's second line to match the name and type of your existing column. (For example, Laravel's id column type is BIGINT UNSIGNED.)

  4. Tested using MariaDB 10.11.10, HeidiSQL 12.8.0.6908, and MySQL 8.0.30. Credit to HeidiSQL's implementation and handy “ALTER code” table tab for the correct sequence.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.