3

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

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

我想将 varchar toolid 字段转换为 int 类型,同时使用它们的键保存数据,我也希望该字段自动递增。

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

最好的方法是什么?

4

4 回答 4

5

如果您只想将 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`;
于 2012-10-16T09:29:39.083 回答
0

Try these three separate commands:

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;

If you need to adjust the AUTO_INCREMENT value:

ALTER TABLE `Tools` AUTO_INCREMENT = 10
于 2012-05-16T17:36:56.813 回答
0

如果未将其设置为主键:

alter table tools add primary key (toolid);

将 Auto Increment 值设置为您希望 NEXT 值的值(比您当前的值高 1:

alter table tools AUTO_INCREMENT=[value];

更改表定义:

Alter Table Tools Change Column toolid toolid integer NOT NULL AUTO_INCREMENT;
于 2012-05-16T17:38:58.077 回答
0

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

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

无论主键与数据类型相关的任何表都需要更改。

因此,如果您更改表格工具,您将不得不更改它链接到的表格,如果是这种情况。

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

如果要保留相同的工具ID,则必须使用正确的列约束创建一个新表,通过按升序运行插入语句或类似的方法来填充表...

于 2012-05-16T18:50:04.680 回答