将AUTO_INCREMENT添加到巨大表中的现有列

时间:2014-12-05 08:35:50

标签: java mysql sql hibernate

我这里有一个相当大的问题...... 我们有一个MySQL数据库,其中包含超过2600万行的表。 现在,问题是我的Java代码正在生成主键(通过Hibernate注释),因为该列没有auto_increment标志。 (不知道为什么)

此设置可能会不时出现问题,例如PK列上的约束违规。 我想改变它,以便MySQL生成自动递增的PK。

有没有办法在不重建这个庞大的表的情况下向列添加auto_increment?及时,因为我们的服务窗口只有2个小时。

此致

1 个答案:

答案 0 :(得分:0)

是的,这很容易。 首先,你必须找出你最高的指数是什么:

SELECT max(id_column) FROM your_table;

然后将表改为自动递增

ALTER TABLE your_table CHANGE COLUMN id_column AUTO_INCREMENT;
ALTER TABLE your_table AUTO_INCREMENT = the_value_from_above + 1;

我对确切的语法并不是100%肯定,因此您可能需要检查here或使用MySQL Workbench。 这不会重建表,只需更改元数据。

请记住,您还必须让hibernate知道auto_increment。