MySQL:忘了设置自动增量

Nic*_*den 7 mysql auto-increment

我建立了一个数据库,其中包含一个自动递增列,该列是一个ID.问题是我忘了在phpMyAdmin中创建表时检查自动增量...并且直到现在才注意到!所以我拥有的是:

ID   |   column one   |   column two
------------------------------------
0    |   some value   |   some value
0    |   other value  |   something else
0    |   example val. |   something
0    |   my example   |   something
Run Code Online (Sandbox Code Playgroud)

基本上,我的"自动递增"列显示全面的零.如何修改此表以显示所有先前和所有未来行的自动增量?

Kev*_*vin 9

如果表是空的,你可以这样做:

ALTER TABLE mytable MODIFY COLUMN id bigint not null primary key auto_increment
Run Code Online (Sandbox Code Playgroud)

但我不确定它中的行会发生什么.最好创建一个具有正确定义的新数据,将数据复制到减去id列,删除旧(错误)表,并将新表移动到旧名称.

-- Either: 
CREATE TABLE newtable LIKE mytable;
ALTER TABLE newtable MODIFY COLUMN id bigint not null primary key auto_increment;
-- or:
CREATE TABLE newtable (
    id bigint not null primary key auto_increment,
    column1 type1,
    column2 type2,
    ...
);

INSERT INTO newtable 
    (column1, column2, ...) 
    SELECT column1, column2, column3, ... 
    FROM mytable;
-- Make SURE that insert worked BEFORE you drop the old table 
-- and lose data if it didn't.
DROP TABLE mytable;
ALTER TABLE newtable RENAME TO mytable;
Run Code Online (Sandbox Code Playgroud)

我确信phpMyAdmin能够更加图形化地完成这项工作.


Boo*_*eus 7

首先更新您的记录(否则您将获得重复的主键):

UPDATE `tablename` SET id = 1 WHERE "column one" = 'some value';
UPDATE `tablename` SET id = 2 WHERE "column one" = 'other value';
UPDATE `tablename` SET id = 3 WHERE "column one" = 'example val.';
UPDATE `tablename` SET id = 4 WHERE "column one" = 'my example';
Run Code Online (Sandbox Code Playgroud)

然后添加主键/ auto_increment:

ALTER TABLE tablename MODIFY COLUMN id int(11) NOT NULL primary key auto_increment;
Run Code Online (Sandbox Code Playgroud)

然后设置下一个auto_increment:

ALTER TABLE tablename  AUTO_INCREMENT = 5;
Run Code Online (Sandbox Code Playgroud)