mysql - 表定义不正确;只能有一个自动列,并且必须将其定义为键,但它是

标签 mysql create-table

当我尝试在 MySQL 中创建“子类别”表时遇到此错误

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

涉及的表是:

CREATE TABLE categorias (
    idcategoria INTEGER(3) NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(32) NOT NULL,
    descripcion VARCHAR(256) NOT NULL,
    logo VARCHAR(128) NOT NULL COMMENT 'url',
    imagen VARCHAR(128) NOT NULL COMMENT 'url',
    recomendado ENUM('0', '1', '2', '3', '4', '5') NOT NULL DEFAULT '0',
    estado ENUM('0', '1') NOT NULL DEFAULT '0',
    PRIMARY KEY (idcategoria)
) ENGINE=InnoDB;
CREATE TABLE subcategorias (
    idcategoria INTEGER(3) NOT NULL,
    idsubcategoria INTEGER(3) NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(32) NOT NULL,
    descripcion VARCHAR(256) NOT NULL,
    logo VARCHAR(128) NOT NULL COMMENT 'url',
    imagen VARCHAR(128) NOT NULL COMMENT 'url',
    recomendado ENUM('0', '1', '2', '3', '4', '5') NOT NULL DEFAULT '0',
    estado ENUM('0', '1') NOT NULL DEFAULT '0',
    PRIMARY KEY (idcategoria, idsubcategoria),
    FOREIGN KEY (idcategoria) REFERENCES categorias(idcategoria)
) ENGINE=InnoDB;

问题是什么?

最佳答案

这里:

CREATE TABLE subcategorias (
    idcategoria INTEGER(3) NOT NULL,
    idsubcategoria INTEGER(3) NOT NULL AUTO_INCREMENT,   <---your auto_inc column

    PRIMARY KEY (idcategoria, idsubcategoria),  <--- the PK definition

您的 auto_inc 列是主键的部分,但它本身并不是主键。您不能使用这种构造。 auto_inc 字段必须是 PK 定义中的唯一字段。

关于mysql - 表定义不正确;只能有一个自动列,并且必须将其定义为键,但它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748045/

相关文章:

mysql - 如何在 SQL 中定义一个表,其中 2 个字段是非空(强制)依赖的?

mysql - 语法有什么问题?

mysql - 为什么 MySQL 没有正确命名我的外键?

c# - 是否可以在 Microsoft SQL Server 中创建作为日期部分的列?

php - 如何基于表格添加自定义列 - Laravel

jquery - 将日期插入数据库时​​如何替换错误的日期?

mysql - 在 Mysql/Mariadb 中删除 --temporary-- 索引

php - 安装表并防止 2 列的重复输入

PHP-获取与 api 一起使用的单元格的值

javascript - 使用 php 将登录用户从登录页面重定向到用户仪表板