Problem z zapytaniem: może istnieć tylko jedna kolumna automatyczna

10

Czy ktoś może mi powiedzieć, co jest nie tak z tą definicją tabeli.
Wersja mysql to 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
źródło
1
Podoba mi się to pytanie (+1 dla Ciebie), ponieważ przedstawia gotcha MySQL, która jest unikalna dla MyISAM. Pytanie o to, dlaczego zawsze jest o wiele lepsze niż rezygnacja i przeprojektowanie.
RolandoMySQLDBA

Odpowiedzi:

12

Najwyraźniej będzie to działać z MyISAM jako silnikiem pamięci, a nie InnoDB, jeśli możesz z tym żyć.

Innym sposobem, aby zmusić go do pracy jest, jeśli zamienić miejscami queuei idxw pierwotnej deklaracji klucza.

Gustav Barkefors
źródło
1

Możesz również dać idxswój własny klucz, jeśli wolisz mieć queuepierwszy w PK. Zwróć uwagę na dodanie index(idx)wiersza:

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
źródło
-1

Spróbuj usunąć pole kolejki z klucza podstawowego. Jeśli chcesz, możesz zindeksować kolumnę kolejki

Prathab K
źródło
4
Ten rodzaj pokonuje punkt tabeli.
Nifle
4
Czy zdajesz sobie sprawę, że tego właśnie pytający próbuje uniknąć?
jcolebrand