Problème de requête: il ne peut y avoir qu'une seule colonne automatique

10

Quelqu'un peut-il me dire ce qui ne va pas avec cette définition de table.
la version de mysql est 5.1.52-log

root@localhost spoolrdb> create table spoolqueue (
                             queue int,
                             idx bigint not null auto_increment,
                             status smallint,
                             querystring varchar(2048),
                             contenttype varchar(255),
                             characterencoding varchar(16),
                             body text,
                             primary key(queue,idx)
                             );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Nifle
la source
1
J'aime cette question (+1 pour vous) car elle présente un gotcha MySQL qui est unique à MyISAM. Demander pourquoi est toujours bien mieux que d'abandonner et de repenser.
RolandoMySQLDBA

Réponses:

12

Cela fonctionnera apparemment avec MyISAM en tant que moteur de stockage, pas InnoDB, si vous pouvez vivre avec cela.

Une autre façon de le faire fonctionner est de permuter les emplacements de queueet idxdans la déclaration de clé primaire.

Gustav Barkefors
la source
1

Vous pouvez également donner idxsa propre clé si vous préférez avoir d' queueabord dans le PK. Notez l'ajout de la index(idx)ligne:

create temporary table spoolqueue (
    queue int,
    idx bigint not null auto_increment,
    status smallint,
    querystring varchar(2048),
    contenttype varchar(255),
    characterencoding varchar(16),
    body text,
    primary key(queue,idx),
    index(idx)
);
Matthew Read
la source
-1

Essayez de supprimer le champ de file d'attente de la clé primaire. Vous pouvez indexer la colonne de file d'attente si vous le souhaitez

Prathab K
la source
4
Ce genre de défait le point de la table.
Nifle
4
Vous rendez-vous compte que c'est ce que le demandeur essaie d'éviter?
jcolebrand