Может быть только один автоматический столбец - PullRequest
91 голосов
/ 27 декабря 2011

Как исправить ошибку из 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;

Ответы [ 4 ]

101 голосов
/ 27 декабря 2011

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;
31 голосов
/ 27 декабря 2011

Звучит полное сообщение об ошибке:

ОШИБКА 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;
6 голосов
/ 11 января 2018

Также обратите внимание, что «ключ» не обязательно означает первичный ключ. Примерно так будет работать:

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;

Это надуманный пример и, возможно, не лучшая идея, но в некоторых случаях он может быть очень полезен.

5 голосов
/ 27 декабря 2011
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
...