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

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 .


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

-1

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


4
Diese Art besiegt den Punkt der Tabelle.
Nifle

4
Ist Ihnen klar, dass der Fragesteller versucht, dies zu vermeiden?
Jcolebrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.