2014-12-05 52 views
0

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

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

有什么办法可以将auto_increment添加到列而不必重新编译这个庞大的表格吗?及时,因为我们的服务窗口只有2个小时。

Regards

+0

我建议你试试它作为临时表的小样本。如果它完全采取任何形式的重建,我会感到惊讶。重新定义它之后,您必须设置自动增量键的下一个值。 – EJP 2014-12-05 08:38:53

回答

0

是的,这很容易。 首先,你得找出你的hightest指数是什么:

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。

+0

这将导致MySQL将整个表复制到一个临时表中,之后它将进行修改并将其复制回来。相信我,它不起作用。这将需要长达12小时,因为我们在这张表中的数据量很大 – 2014-12-05 08:58:09

+0

哦,我绝对相信它不会这么做!也许它取决于版本或表引擎?如何直接窃取表格定义。你有一个测试系统,不是吗? – Chris 2014-12-05 09:04:09

+0

我们使用的是INNODB,我们试着运行一个类似的问题,它做了我上面评论的内容:( – 2014-12-05 09:40:35

相关问题