Abfrageproblem: Es kann nur eine automatische Spalte geben

10

Kann mir bitte jemand sagen, was mit dieser Tabellendefinition nicht stimmt?
MySQL-Version ist 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
quelle
1
Ich mag diese Frage (+1 für Sie), weil sie ein MySQL-Gotcha darstellt, das nur in MyISAM verfügbar ist. Nach dem Warum zu fragen ist immer viel besser als aufzugeben und neu zu gestalten.
RolandoMySQLDBA

Antworten:

12

Dies wird anscheinend mit MyISAM als Speicher-Engine funktionieren, nicht mit InnoDB, wenn Sie damit leben können.

Eine andere Möglichkeit, es zum Laufen zu bringen, besteht darin, Orte von queueund idxin der Primärschlüsseldeklaration zu tauschen .

Gustav Barkefors
quelle
1

Sie können auch idxeinen eigenen Schlüssel angeben, wenn Sie dies lieber queuezuerst in der PK haben möchten . Beachten Sie das Hinzufügen der index(idx)Zeile:

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
quelle
-1

Versuchen Sie, das Warteschlangenfeld aus dem Primärschlüssel zu entfernen. Sie können die Warteschlangenspalte indizieren, wenn Sie möchten

Prathab K.
quelle
4
Diese Art besiegt den Punkt der Tabelle.
Nifle
4
Ist Ihnen klar, dass der Fragesteller versucht, dies zu vermeiden?
Jcolebrand