Só pode haver uma coluna automática

104

Como faço para corrigir o erro do MySQL 'você só pode ter uma coluna de incremento automático'.

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;
BuddyJoe
fonte

Respostas:

119

Meu MySQL diz "Definição de tabela incorreta; pode haver apenas uma coluna automática e ela deve ser definida como uma chave " Então, quando adicionei a chave primária abaixo, ela começou a funcionar:

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;
emstol
fonte
6
Qual é o curso de ação correto se a coluna faz parte de uma chave composta?
Nubcake de
Qual é a sintaxe ao alterar a tabela?
Mike Harrison
2
@MikeHarrison parece que você pode simplesmente colocar ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur
34

A mensagem de erro completa soa:

ERROR 1075 (42000): Definição de tabela incorreta; pode haver apenas uma coluna automática e deve ser definida como uma chave

Portanto, adicione primary keyao auto_incrementcampo:

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;
TMS
fonte
13

Observe também que "chave" não significa necessariamente chave primária . Algo assim funcionará:

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;

Este é um exemplo inventado e provavelmente não é a melhor ideia, mas pode ser muito útil em certos casos.

Matthew Read
fonte
Isso me ajudou em uma situação em que eu queria definir uma chave composta para fácil atualização, mas também queria ter um ID de incremento automático para fins de depuração. Há algo que eu deva estar ciente em termos de risco, além de gravações um pouco mais lentas, possivelmente?
Mattias Martens
2
@Mattias Não, não acredito que haja nenhum risco particular. Isso é suportado intencionalmente, com a coluna automática sendo a chave primária puramente por convenção (e para simplificar).
Mateus leu
5
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
Deept Raghav
fonte