Può esserci solo una colonna automatica


104

Come correggo l'errore da MySQL "puoi avere solo una colonna di incremento automatico".

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;

Risposte:


119

Il mio MySQL dice "Definizione di tabella errata; può esserci solo una colonna automatica e deve essere definita come una chiave " Quindi, quando ho aggiunto la chiave primaria come sotto, ha iniziato a funzionare:

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 è l'azione corretta se la colonna fa parte di una chiave composta?
Nubcake

Qual è la sintassi quando si modifica la tabella?
Mike Harrison

2
@ MikeHarrison sembra che tu possa semplicemente mettere ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

Viene riprodotto il messaggio di errore completo:

ERRORE 1075 (42000): definizione di tabella non corretta; può esserci solo una colonna auto e deve essere definita come chiave

Quindi aggiungi 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;

13

Nota anche che "chiave" non significa necessariamente chiave primaria . Qualcosa di simile funzionerà:

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;

Questo è un esempio artificioso e probabilmente non è l'idea migliore, ma può essere molto utile in alcuni casi.


Questo mi ha aiutato in una situazione in cui volevo definire una chiave composita per un facile aggiornamento, ma volevo anche avere un ID a incremento automatico per scopi di debug. C'è qualcosa di cui dovrei essere consapevole in termini di rischio, a parte forse scritture leggermente più lente?
Mattias Martens

2
@Mattias No, non credo ci sia un rischio particolare. Questo è intenzionalmente supportato, con la colonna auto che è la chiave primaria puramente per convenzione (e per semplicità).
Matthew Read

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.