存在表后添加新ID(自动增量)的麻烦

时间:2011-01-28 14:38:46

标签: mysql auto-increment

我有一张包含38.000条记录的表格,但没有像ID这样的自动增量列 现在我必须添加一个ID列,我想知道会有麻烦吗?

7 个答案:

答案 0 :(得分:34)

如果您的桌子与其他人没有关系,您可以添加而不会出现问题。

您必须删除旧主键并相应地上传表(可能在旧主键上添加唯一索引)。

继续这样:

  • 转储数据库

  • 删除主键

ALTER TABLE XXX DROP PRIMARY KEY
  • 像这样添加新列
ALTER TABLE XXX add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id(Id)

将查看该表并更新AutoInc。

答案 1 :(得分:21)

这会在MySQL表中添加一个自动增量ID:

ALTER TABLE  `your_table_name` ADD  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

根据您桌面上的数据量,可能需要几分钟才能完成。

答案 2 :(得分:7)

这是我尝试使用MySQL Workbench的解决方案:

ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT  ;

我不知道这是否正确,但我还没有注意到我的Java EE应用程序中存在任何问题。

答案 3 :(得分:1)

我使用非常大的数据并且在id列中填充了NULLS。我选择运行以下SQL来填充数字......然后我将id列设置为我的主键。

getLabelData

答案 4 :(得分:0)

  

“会有麻烦吗?”

插入唱片可能会遇到麻烦。然而...

通常,添加新字段通常是非常安全的,无论它是否是自动递增列。如果您不确定所有依赖项,它会更改或删除最有可能导致问题的列。

然而,为了安全起见,我首先在复制(测试)版本上尝试它并首先针对测试版运行您的应用程序,以确保安全。无论如何,最好使用测试环境。

您能更具体地了解您担心的问题类型吗?

答案 5 :(得分:0)

您可能需要先将其添加为主键,然后才能将其设为自动增加字段

您可以查看此示例

ALTER TABLE `category`
ADD PRIMARY KEY (`cat_id`);
ALTER TABLE `category`
MODIFY `cat_id` int(11) NOT NULL AUTO_INCREMENT;

答案 6 :(得分:-3)

定义更改为任何字段的问题是更改是“破坏性的”。最好将此类更改视为数据迁移。我没有使用MySQL,但必须向SQL Server添加自动编号。基本思路是一样的。

检查文档,因为MySQL可能有一种机制来添加自动增量而不重置字段。如果是这样,通过SQL执行它将解决问题。一般来说,我建议不要使用工具直观地进行这些类型的更改,因为大多数工具在其方法论中都是非常具有破坏性的。