MySQL #1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key错误

MySQL #1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key错误

在MySQL中,有一个常见的错误是#1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key。这个错误出现的原因是由于在一个表中,有多个自动递增的列,并且这些列没有被定义为主键或唯一键。下面将详细介绍这个错误及其解决方法。

阅读更多:MySQL 教程

错误的产生原因

在MySQL中,当我们定义自动递增的列时,我们需要将其定义为表的主键或唯一键。如果我们定义了多个自动递增的列,并且没有定义为主键或唯一键,那么当我们执行创建表或更改表的操作时,就会出现#1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key的错误。

例如,我们尝试创建一个表,其中有两个自动递增的列,如下所示:

CREATE TABLE `test` (
  `id1` int(11) NOT NULL AUTO_INCREMENT,
  `id2` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id1`),
  KEY `idx_id2` (`id2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Mysql

执行上述的SQL语句,会出现以下错误:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Mysql

这是因为我们定义了两个自动递增列,但没有将其任何一个定义为主键或唯一键。

解决方法

当出现#1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key错误时,我们需要检查表定义并进行修正。有以下两种解决方法:

方法一:定义一个主键

我们可以将其中一个自动递增列定义为主键:

CREATE TABLE `test` (
  `id1` int(11) NOT NULL AUTO_INCREMENT,
  `id2` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id1`),
  UNIQUE KEY `idx_id2_name` (`id2`,`name`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Mysql

在上面的示例中,我们将id1定义为主键,并将id2和name定义为联合唯一键。

另外,在这个示例中,我们将id2定义为了NOT NULL,因为如果它是NULL,那么它永远不会被自动递增,自动递增的列必须是NOT NULL。

方法二:定义一个唯一键

如果我们不想把其中一个自动递增列作为主键,我们可以将其定义为唯一键:

CREATE TABLE `test` (
  `id1` int(11) NOT NULL,
  `id2` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id1`),
  UNIQUE KEY `idx_id2_name` (`id2`,`name`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Mysql

在上面的示例中,我们将id2定义为唯一键,同时将id1定义为主键。

总结

当在MySQL中出现#1075 – Incorrect table definition; there can be only one auto column and it must be defined as a key错误时,我们需要检查表定义,查看是否定义了多个自动递增列,并且这些列是否被定义为主键或唯一键。如果未定义,则需要将其中一个自动递增列定义为主键或唯一键。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册