在表存在后添加新的ID(自动递增)的问题

16

我有一个包含 38,000 条记录的表格,但是没有像 ID 这样的自动增量列。
现在我需要添加一个 ID 列,不知道会不会出现问题?


你的行中是否已经有一个整数ID列,用于唯一标识它们? - BoltClock
7个回答

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。

21

这将为您的MySQL表添加自动递增ID:

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

根据您表格中的数据量不同,完成可能需要几分钟时间。


7
这是我使用MySQL Workbench尝试的解决方案:
ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT  ;

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


1

我处理大数据,其中一个ID列填充了NULL值。我选择运行以下SQL语句来填充数字...然后我将该ID列设置为我的主键。

set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;

0

在将其设置为自增字段之前,您可能需要首先将其添加为主键。

您可以查看此示例。

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

0
“可能会有麻烦吗?”
仅仅插入一条记录就可能会出现问题。然而...
通常情况下,添加一个新字段通常是相当安全的,无论它是否是自动递增列。如果您不确定所有依赖关系,更改或删除列最有可能导致问题。
为了安全起见,我建议您首先在副本(测试)版本上尝试并先运行您的应用程序以针对测试版本进行测试,以确保安全。无论如何,使用测试环境都是一个好习惯。
您能否更具体地说明您担心的问题类型是什么?

-3
你对于任何字段的定义更改的问题是这种变化是“破坏性”的。最好将这样的变化视为数据迁移。我没有在MySQL中做过这个,但是在SQL Server中不得不添加自动编号。基本思路是一样的。
请查阅文档,因为MySQL可能有一种机制可以在不重置字段的情况下添加自动递增。如果有的话,通过SQL来解决问题。总的来说,我建议不要使用工具进行这些类型的可视化更改,因为大多数工具在方法论上非常破坏性。

1
刚在phpMyAdmin中添加了新字段,一切似乎都正常。排序做得不好,但这并不重要。谢谢。 - Bobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接