我之前的开发人员创建了名为“Tools”的数据库表,它包含两个字段,toolid - varchar(255)和toolname - varchar(100) 。将设置为varchar的主键字段转换为int字段
toolid字段的类型是varchar,它是主键。表中有数据。
我想将varchar toolid字段转换为int类型,同时将数据保存在其键中,同时我希望该字段为自动增量。
目前的关键是数字,比如12或22或3
最新最好的方式做到这一点?
我之前的开发人员创建了名为“Tools”的数据库表,它包含两个字段,toolid - varchar(255)和toolname - varchar(100) 。将设置为varchar的主键字段转换为int字段
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;
如果您需要调整AUTO_INCREMENT
值:
ALTER TABLE `Tools` AUTO_INCREMENT = 10
这将启动自动增量值为0,这将是一个问题。 – Ilion
会吗?它在我的测试中自动调整。通过我添加了一个查询,以防万一。 – bfavaretto
有可能我在旧版本的MySQL中遇到过这个问题,并且这个问题已经被解决了。 :) – Ilion
如果它不将其作为主键:
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)函数为每个工具ID创建唯一标识符。
如果你想保持相同的toolID你就必须创建具有正确的列限制的新表,按升序或类似的东西运行的INSERT INTO语句填充表...
如果只想将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`;
我不确定,但我认为mysql可以自动处理,只需更改列类型并添加auto_increment。 – bfavaretto
我试过这个使用MySQL工作台创建的“ALTER TABLE'hostidtoolsorg'.'tool' CHANGE COLUMN'toolid'' toolid' INT NOT NULL AUTO_INCREMENT;”,但抛出一个错误。 –
我刚刚尝试过使用PhpMyAdmin,它工作。尽量不要在同一个操作中添加auto_increment – bfavaretto