Mysql 将设置为varchar的主键字段转换为int字段

Mysql 将设置为varchar的主键字段转换为int字段,mysql,Mysql,我之前的开发人员创建了一个名为“Tools”的数据库表,它包含两个字段,toolid-varchar(255)和toolname-varchar(100) toolid字段的类型为varchar,它是主键。表中有数据 我希望将varchar toolid字段转换为int类型,同时保留带有键的数据,我还希望该字段是自动递增的 当前键是数字键,例如12、22或3 最好的方法是什么 试试这三个单独的命令: ALTER TABLE `Tools` CHANGE `toolid` `toolid` INT

我之前的开发人员创建了一个名为“Tools”的数据库表,它包含两个字段,toolid-varchar(255)和toolname-varchar(100)

toolid字段的类型为varchar,它是主键。表中有数据

我希望将varchar toolid字段转换为int类型,同时保留带有键的数据,我还希望该字段是自动递增的

当前键是数字键,例如12、22或3


最好的方法是什么

试试这三个单独的命令:

ALTER TABLE `Tools` CHANGE `toolid` `toolid` INT( 11 ) NOT NULL;
ALTER TABLE `Tools` ADD PRIMARY KEY ( `toolid` );
ALTER TABLE `Tools` CHANGE  `toolid`  `toolid` INT( 11 ) NOT NULL AUTO_INCREMENT;
如果需要调整
自动增量
值:

ALTER TABLE `Tools` AUTO_INCREMENT = 10

如果未将其设置为主键:

alter table tools add primary key (toolid);
将自动增量值设置为下一个值(比当前值高1:

alter table tools AUTO_INCREMENT=[value];
更改表定义:

Alter Table Tools Change Column toolid toolid integer NOT NULL AUTO_INCREMENT;

它被设置为主键,唯一的解决方法是:使用

SQL Server并转到“类似数据库”选项卡转到“选项”或“首选项”或其他内容:从那里,您可以告诉数据库更新所有其他表中的主键,只需使用GUI更改数据类型。您必须确保先选择该选项,否则将不允许保存更改

主键与的数据类型相关的任何表也需要更改

因此,如果更改表工具,则必须更改它链接到的表(如果是这种情况)

您可能需要删除并重新创建表,在这种情况下,您可以在使用的任何编辑器中轻松完成这项工作 实际上,您可以使用IDENTITY(1,1)函数为每个toolid创建唯一的标识符


如果要保持相同的toolID,则必须创建一个具有正确列限制的新表,通过以升序或类似方式运行insert into语句来填充该表…

如果只想将varchar字段更改为int字段,当然由于数据类型不匹配,它不允许您这样做r、 一个非常简单的修复方法是:

创建第二个表,该表将包含主表中的所有字段

CREATE TABLE `Tools2` SELECT * FROM `Tools`;
清空数据,因为我们需要将toolname从varchar更改为int,当它已满时无法执行此操作

TRUNCATE TABLE `Tools2`;
好的,让我们更改字段类型

ALTER TABLE `Tools2` CHANGE `toolname` `toolname` INT(11) NOT NULL;
现在,让我们重新插入原始表中的数据

INSERT INTO `Tools2` SELECT * FROM `Tools`;
Tools2现在是Tools的正确版本,因此请删除Tools

DROP TABLE `Tools`;
最后,将Tools2重命名为Tools,这样您就可以开始了

RENAME TABLE `Tools2` TO `Tools`;

我不确定,但我认为mysql可以自动处理这个问题,只需更改列类型并添加自动增量。我使用mysql workbench尝试了这个方法,它创建了“ALTER TABLE
hostidtoolsorg
toolchange column
toolid
INT not NULL auto\u increment;”,但抛出了一个错误。我刚刚尝试使用PhpMyAdmin,但它成功了。尝试在同一操作中不添加自动增量No go,使用MySQL workbench。我没有访问PhpMyAdmin的权限:(听起来该列没有设置为键。您还需要确保设置自动增量值。请参阅下面我的答案。)这将在0处启动自动增量值,这将是一个问题。会吗?它会在我的测试中自动调整。顺便说一句,我添加了一个查询,以防万一。我可能在较旧版本的MySQL中遇到了这一问题,并且已经解决了。:)