Может быть только один автоматический столбец


105

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

Ответы:


120

Мой 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;

6
Как правильно действовать, если столбец является частью составного ключа?
Nubcake

Какой синтаксис при изменении таблицы?
Майк Харрисон,

2
@MikeHarrison, похоже, можно просто поставить ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

Полное сообщение об ошибке звучит:

ОШИБКА 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;

13

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

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;

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


Это помогло мне в ситуации, когда я хотел определить составной ключ для простого обновления, но я также хотел иметь автоматически увеличивающийся идентификатор для целей отладки. Есть ли что-нибудь, о чем я должен знать с точки зрения риска, кроме, возможно, немного более медленной записи?
Маттиас Мартенс

2
@Mattias Нет, я не верю, что есть особый риск. Это поддерживается намеренно, поскольку автоматический столбец является первичным ключом исключительно по соглашению (и для простоты).
Мэтью Рид

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.