2012-05-16 207 views
1

我之前的开发人员创建了名为“Tools”的数据库表,它包含两个字段,toolid - varchar(255)和toolname - varchar(100) 。将设置为varchar的主键字段转换为int字段

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

我想将varchar toolid字段转换为int类型,同时将数据保存在其键中,同时我希望该字段为自动增量。

目前的关键是数字,比如12或22或3

最新最好的方式做到这一点?

+0

我不确定,但我认为mysql可以自动处理,只需更改列类型并添加auto_increment。 – bfavaretto

+0

我试过这个使用MySQL工作台创建的“ALTER TABLE'hostidtoolsorg'.'tool' CHANGE COLUMN'toolid'' toolid' INT NOT NULL AUTO_INCREMENT;”,但抛出一个错误。 –

+0

我刚刚尝试过使用PhpMyAdmin,它工作。尽量不要在同一个操作中添加auto_increment – bfavaretto

回答

0

尝试这三个独立的命令:

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; 

如果您需要调整AUTO_INCREMENT值:

ALTER TABLE `Tools` AUTO_INCREMENT = 10 
+0

这将启动自动增量值为0,这将是一个问题。 – Ilion

+0

会吗?它在我的测试中自动调整。通过我添加了一个查询,以防万一。 – bfavaretto

+0

有可能我在旧版本的MySQL中遇到过这个问题,并且这个问题已经被解决了。 :) – Ilion

0

如果它不将其作为主键:

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; 
0

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

SQL Server和上升到类似数据库选项卡归结为选项或首选项或其他内容:从那里您可以告诉数据库更新所有其他表中的主键,并使用GUI更改数据类型。您必须确保首先选择该选项,否则将无法保存更改。

无论主键与数据类型相关的表是否需要更改。

所以,如果你改变表格工具,你将不得不改变它链接到的表格,如果是这样的话。

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

如果你想保持相同的toolID你就必须创建具有正确的列限制的新表,按升序或类似的东西运行的INSERT INTO语句填充表...

2

如果只想将varchar字段更改为int字段,但由于数据类型不匹配,当然不会让您,但是,一个非常简单的修复方法是:

创建第二个表,它将包含所有从你的主要领域。

CREATE TABLE `Tools2` SELECT * FROM `Tools`; 

清空数据,因为我们需要将工具名称从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`;