代码之家  ›  专栏  ›  技术社区  ›  Moin Zaman

如何将现有mysql表中包含数据的id从上一个最高id更改为autoincrement?

  •  1
  • Moin Zaman  · 技术社区  · 14 年前

    我刚刚成功地将一个很大的数据库从SQL Server迁移到了MySQL。在迁移期间,我没有将主键设置为自动递增,因为表中的关系基于ID作为主键,而这些主键是另一个表中的外键。

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

    在不失去已有关系的情况下,最好的方法是什么?

    更新:尝试添加autoincrement时出现以下错误:

    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
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Alin P.    14 年前

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

    注意,自动递增的列意味着如果不给它赋值,MySQL就会添加一个值。如果您想提供显式的值,那么可以在不发生任何特殊情况的情况下这样做。所以您可以将这些列设置为从一开始就自动递增。

    具有自动增量的列不能有显式默认值。

    测试