如何更改现有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
只需添加您需要的列自动增量。它不会影响现有的行。它将从下一个可用值开始。
请注意,自动增加的列意味着如果您没有为其赋值,MySQL将添加一个值。如果你想提供明确的值,你可以做到这一点,没有任何特别的事情发生。因此,您可以将这些列设置为从头开始自动递增。
具有自动增量的列不能有明确的默认值。
测试
我尝试这样做时出现错误。查看问题 – 2010-10-26 21:06:22
中的更新@Moin我不认为你应该有自动增量的默认值。这没有意义。我现在会测试它并让你知道。 – 2010-10-26 21:10:44
默认值*是由autoincrement属性指定的值。所以你不能明确地设置它。 – 2010-10-26 21:13:46
我想我得到了它。默认值被设置为'0'。更新了alter table命令,没有任何默认值,并且它工作正常。 – 2010-10-26 21:11:15
是的。就是这样。看到我的评论波纹管也; – 2010-10-26 21:12:24
它兼容默认'0'和AUTO_INCREMENT?如果将字段设置为自动增量,则默认为'0',否? – angelcervera 2010-10-26 21:15:24