我有一张包含38.000条记录的表格,但没有像ID
这样的自动增量列
现在我必须添加一个ID
列,我想知道会有麻烦吗?
答案 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执行它将解决问题。一般来说,我建议不要使用工具直观地进行这些类型的更改,因为大多数工具在其方法论中都是非常具有破坏性的。