MySQL 修复MySQL ERROR 1075(42000):错误的表定义;只能有一个自动列,必须将其定义为键
在MySQL中创建表时,经常会遇到各种错误。其中,ERROR 1075(42000)就是一个比较常见的错误。具体表现为:只能有一个自动列,必须将其定义为键。本文将介绍如何解决这个错误。
阅读更多:MySQL 教程
错误的示例
首先,我们看下面的示例代码。
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
PRIMARY KEY(id),
PRIMARY KEY(name) # 错误语句
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行以上代码,会得到以下错误提示:ERROR 1075(42000):错误的表定义;只能有一个自动列,必须将其定义为键
这是因为以上代码中,定义了两个PRIMARY KEY,一个是id,另一个是name。而MySQL规定每个表只能定义一个主键,所以就抛出了这个错误。
解决方法
要解决这个错误,需要做两件事情:
- 删除多余的主键
- 将自动列定义为主键
具体的代码如下:
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
PRIMARY KEY(id) # 将id定义为主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
重新执行以上代码,便不会再出现ERROR 1075错误了。
注意事项
要特别注意的是,对于自增列,必须将它定义为主键。如果不定义为主键,就会报以上错误。
以下是错误示例:
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行以上代码后,会报ERROR 1075错误。因为代码中没有定义主键。
要解决这个错误,只需要将id定义为主键即可:
CREATE TABLE student(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, # 将id定义为主键
name VARCHAR(20) NOT NULL,
age INT NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
结论
如果在MySQL创建表时遇到ERROR 1075(42000):错误的表定义;只能有一个自动列,必须将其定义为键的错误,只需要将自动列定义为主键即可。同时,要注意每个表只能定义一个主键。
极客笔记