web-dev-qa-db-fra.com

Il ne peut y avoir qu'une seule colonne automatique

Comment corriger l'erreur de MySQL "Vous ne pouvez avoir qu'une seule colonne à incrémentation automatique".

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

Mon MySQL dit "Définition de table incorrecte; il ne peut y avoir qu'une seule colonne automatique et elle doit être définie en tant que clé" Ainsi, lorsque j'ai ajouté une clé primaire comme ci-dessous, il a commencé à fonctionner:

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;
101
emstol

Le message d'erreur complet sonne:

ERREUR 1075 (42000): définition de table incorrecte; il ne peut y avoir qu'une seule colonne automatique et elle doit être définie comme une clé

Alors ajoutez primary key à la auto_increment champ:

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;
31
TMS

Notez également que "clé" ne signifie pas nécessairement primaire clé. Quelque chose comme ça va marcher:

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;

Ceci est un exemple artificiel et probablement pas la meilleure idée, mais il peut être très utile dans certains cas.

6
Matthew Read
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
5
Deept Raghav