如何更改现有MySQL表中的id,并使用自上次最高id自动增加的数据?

问题描述:

我刚刚设法将相当大的数据库从SQL Server迁移到MySQL。我没有将主键设置为在迁移期间自动增量,因为这些表具有基于ID作为主键的关系,这些主键是另一个表中的外键。如何更改现有MySQL表中的id,并使用自上次最高id自动增加的数据?

现在要添加新记录我想将所有表中的主键“id”列更改为自动增量,但是从每个表中id列的最后一个最高数字开始。

在不失去我已有的关系的情况下做到这一点的最佳方式是什么?

UPDATE:如果添加自动增量给了我这个错误:

ERROR 1067: Invalid default value for 'id' 

SQL Statement: 

ALTER TABLE `skandium`.`brands` CHANGE COLUMN `id` `id` INT(11) NOT NULL DEFAULT '0' AUTO_INCREMENT 

ERROR 1050: Table 'brands' already exists 

SQL Statement: 

CREATE TABLE `brands` (
    `id` int(11) NOT NULL DEFAULT '0', 
    `brand` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
+0

我想我得到了它。默认值被设置为'0'。更新了alter table命令,没有任何默认值,并且它工作正常。 – 2010-10-26 21:11:15

+0

是的。就是这样。看到我的评论波纹管也; – 2010-10-26 21:12:24

+0

它兼容默认'0'和AUTO_INCREMENT?如果将字段设置为自动增量,则默认为'0',否? – angelcervera 2010-10-26 21:15:24

只需添加您需要的列自动增量。它不会影响现有的行。它将从下一个可用值开始。

请注意,自动增加的列意味着如果您没有为其赋值,MySQL将添加一个值。如果你想提供明确的值,你可以做到这一点,没有任何特别的事情发生。因此,您可以将这些列设置为从头开始自动递增。

具有自动增量的列不能有明确的默认值。

测试

+0

我尝试这样做时出现错误。查看问题 – 2010-10-26 21:06:22

+0

中的更新@Moin我不认为你应该有自动增量的默认值。这没有意义。我现在会测试它并让你知道。 – 2010-10-26 21:10:44

+0

默认值*是由autoincrement属性指定的值。所以你不能明确地设置它。 – 2010-10-26 21:13:46