sql - 如何将现有 MySQL 表中的 id 更改为从最后一个最高 id 自动递增的数据?

标签 sql mysql database mysql-error-1050 mysql-error-1067

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

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

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

更新:尝试添加自动增量给我这个错误:

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 将添加一个值。如果您想提供明确的值,您可以这样做而不会发生任何特殊情况。因此,您可以将这些列设置为从一开始就自动递增。

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

已测试

关于sql - 如何将现有 MySQL 表中的 id 更改为从最后一个最高 id 自动递增的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027954/

相关文章:

sql - DB2 将数字转换为日期

sql - 部署到 Azure 应用服务时,ASP.NET Core Razor Pages Web 应用程序中的 Active Directory 交互式身份验证不起作用

php - 从集合中的相同日期记录中仅获取一条记录 - Laravel

sql - 奇怪的 PostgreSQL "value too long for type character varying(500)"

android - 覆盖现有数据库

mySQL - 如何展平记录和子记录

php - 即使查询成功,SQL仍返回错误

php - 如何获得此代码的输出。有时显示输出,有时不显示?

php - 使用 php 在 mysql 中检索动态列卡住

php - 简化 MYSQL 查询并修复