【发布时间】:2011-06-17 07:05:48
【问题描述】:
我有一个包含 38.000 条记录的表,但没有像 ID 这样的任何自动递增列。
现在得加个ID列,不知道会不会有麻烦?
【问题讨论】:
-
是否已经有一个整数 ID 列可以唯一标识您的行?
标签: mysql auto-increment
我有一个包含 38.000 条记录的表,但没有像 ID 这样的任何自动递增列。
现在得加个ID列,不知道会不会有麻烦?
【问题讨论】:
标签: mysql auto-increment
您对任何字段的定义更改的问题是更改是“破坏性的”。最好将此类更改视为数据迁移。我没有用 MySQL 做这件事,但不得不向 SQL Server 添加自动编号。基本思路是一样的。
查看文档,因为 MySQL 可能具有添加自动增量而不重置字段的机制。如果是这样,通过 SQL 来解决问题。一般来说,我建议不要使用工具直观地进行这些类型的更改,因为大多数工具在其方法上都极具破坏性。
【讨论】:
“会不会有麻烦?”
仅插入记录可能会出现问题。不过……
一般来说,添加一个新字段通常是很安全的,不管它是否是一个自动递增的列。如果您不确定所有依赖项,它会更改或删除最有可能导致您出现问题的列。
不过,为了安全起见,为了安全起见,我会先在副本(测试)版本上进行尝试,然后先针对测试版本运行您的应用。无论如何,最好使用测试环境。
您能否更具体地说明您担心的问题类型?
【讨论】:
只有如果您的表与其他人没有关系,您可以毫无问题地添加。
您必须删除旧主键并相应地上传表(可能在旧主键上添加唯一索引)。
这样继续:
转储您的数据库
这样删除主键
ALTER TABLE XXX DROP PRIMARY KEY
ALTER TABLE XXX add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id(Id)
将查看表格并更新 AutoInc。
【讨论】:
这是我尝试使用 MySQL Workbench 的解决方案:
ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;
我不知道这是否正确,但我还没有注意到我的 Java EE 应用程序有任何问题。
【讨论】:
这将为您的 MySQL 表添加一个自动增量 ID:
ALTER TABLE `your_table_name` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
根据您表上的数据量,可能需要几分钟才能完成。
【讨论】:
您可能需要先将其添加为主键,然后才能将其设置为自动增加字段
你可以看看这个例子
ALTER TABLE `category`
ADD PRIMARY KEY (`cat_id`);
ALTER TABLE `category`
MODIFY `cat_id` int(11) NOT NULL AUTO_INCREMENT;
【讨论】:
我处理非常大的数据,并且有一个用 NULLS 填充的 id 列。我选择运行以下 SQL 来填充数字...然后我将 id 列设置为主键。
set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;
【讨论】: