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

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.


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)
);

-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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.