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;

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;

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;

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.