【问题标题】:Convert a primary key field that is set as a varchar to become a int field将设置为 varchar 的主键字段转换为 int 字段
【发布时间】:2012-10-16 17:36:44
【问题描述】:

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

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

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

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

最好的方法是什么?

【问题讨论】:

  • 我不确定,但我认为mysql可以自动处理,只需更改列类型并添加auto_increment。
  • 我使用 MySQL 工作台进行了尝试,它创建了“ALTER TABLE hostidtoolsorg.tool CHANGE COLUMN toolid toolid INT NOT NULL AUTO_INCREMENT ;”,但抛出了错误。
  • 我刚刚尝试使用 PhpMyAdmin 并且它有效。尽量不要在同一个操作中添加auto_increment
  • 不行,使用 MySQL 工作台。我无权访问 PHPMyAdmin :(
  • 听起来该列未设置为键。您还需要确保设置自动增量值。请看下面我的回答。 :)

标签: mysql


【解决方案1】:

如果你只想将 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`;

【讨论】:

    【解决方案2】:

    如果没有设置为主键:

    alter table tools add primary key (toolid);
    

    将自动增量值设置为您希望 NEXT 值的值(比当前值高 1:

    alter table tools AUTO_INCREMENT=[value];
    

    更改表定义:

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

    【讨论】:

      【解决方案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;
      

      如果需要调整AUTO_INCREMENT的值:

      ALTER TABLE `Tools` AUTO_INCREMENT = 10
      

      【讨论】:

      • 那会从 0 开始自动递增值,这将是一个问题。
      • 会吗?它在我的测试中自动调整。为了以防万一,我添加了一个查询。
      • 这可能是我在旧版本的 MySQL 中遇到的,并且已经得到解决。 :)
      【解决方案4】:

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

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

      无论主键与哪个表相关的数据类型也需要更改。

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-01
        • 2011-01-28
        • 2021-08-30
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 2014-08-11
        相关资源
        最近更新 更多