【发布时间】:2012-01-28 13:47:22
【问题描述】:
如何更正 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;
【问题讨论】:
如何更正 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;
【问题讨论】:
另请注意,“键”不一定表示主键。这样的事情会起作用:
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;
这是一个人为的例子,可能不是最好的主意,但在某些情况下它可能非常有用。
【讨论】:
我的 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;
【讨论】:
ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
完整的错误信息响起:
ERROR 1075 (42000):表定义不正确;只能有一个自动列,并且必须定义为一个键
所以将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;
【讨论】:
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
【讨论】: