只能有一个自动列

我如何更正来自 MySQL 的错误‘你只能有一个自动增量列’。

CREATE TABLE book (
id INT AUTO_INCREMENT NOT NULL,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
229208 次浏览
CREATE TABLE book (
id INT AUTO_INCREMENT primary key NOT NULL,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

完整的错误消息听起来:

ERROR 1075(42000) : 表定义不正确; 只能有一个 auto 列,并且必须将其定义为键

因此,将 primary key添加到 auto_increment字段:

CREATE TABLE book (
id INT AUTO_INCREMENT primary key NOT NULL,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我的 MySQL 说“不正确的表定义; 只能有一个自动列 它必须被定义为一把钥匙”,所以当我添加主键如下开始工作:

CREATE TABLE book (
id INT AUTO_INCREMENT NOT NULL,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL,
primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

还要注意的是,“键”并不一定意味着 初选键:

CREATE TABLE book (
isbn             BIGINT NOT NULL PRIMARY KEY,
id               INT    NOT NULL AUTO_INCREMENT,
accepted_terms   BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL,
INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这是一个人为的例子,可能不是最好的主意,但它可以在某些情况下非常有用。

这是因为在没有创建主键的情况下,SEQUELIZE 将自动生成一个默认名称为 id的主键。这会导致重复,因为您已经创建了一个,SEQUELIZE 也创建了一个。 但是当您将 id定义为主键时,SEQUELIZE 没有创建默认的 id主键。

我想添加一个帮助我的解决方案。如果存在多列主键,则下面的代码将生成相同的错误:

CREATE TABLE book (
id INT AUTO_INCREMENT NOT NULL AUTO_INCREMENT,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL,
PRIMARY KEY (accepted_terms, id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

但是下面的工作很好(注意 PRIMARY KEY的顺序) :

CREATE TABLE book (
id INT AUTO_INCREMENT NOT NULL AUTO_INCREMENT,
accepted_terms BIT(1) NOT NULL,
accepted_privacy BIT(1) NOT NULL,
PRIMARY KEY (id, accepted_terms)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;