Solo puede haber una columna automática

104

¿Cómo corrijo el error de MySQL 'solo puede tener una columna 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
fuente

Respuestas:

119

Mi MySQL dice "Definición incorrecta de la tabla; solo puede haber una columna automática y debe definirse como una clave " Entonces, cuando agregué la clave principal como se muestra a continuación, comenzó 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
fuente
6
¿Cuál es el curso de acción correcto si la columna es parte de una clave compuesta?
Nubcake
¿Cuál es la sintaxis al modificar la tabla?
Mike Harrison
2
@MikeHarrison parece que puedes simplemente poner ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur
34

Suena el mensaje de error completo:

ERROR 1075 (42000): Definición de tabla incorrecta; solo puede haber una columna automática y debe definirse como una clave

Entonces agregue primary keyal 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
fuente
13

Tenga en cuenta también que "clave" no significa necesariamente clave primaria . Algo como esto 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 es un ejemplo artificial y probablemente no sea la mejor idea, pero puede ser muy útil en ciertos casos.

Mateo Leer
fuente
Esto me ayudó en una situación en la que quería definir una clave compuesta para facilitar la actualización, pero también quería tener una ID de incremento automático para fines de depuración. ¿Hay algo que deba tener en cuenta en términos de riesgo, aparte de las posibles escrituras un poco más lentas?
Mattias Martens
2
@Mattias No, no creo que haya ningún riesgo en particular. Esto se admite intencionalmente, siendo la columna automática la clave principal puramente por convención (y por simplicidad).
Mateo Leer
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
Profundo Raghav
fuente