Masalah kueri: hanya ada satu kolom otomatis


10

Dapatkah seseorang tolong beri tahu saya apa yang salah dengan definisi tabel ini.
versi mysql adalah 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
Saya suka pertanyaan ini (+1 untuk Anda) karena menyajikan gotcha MySQL yang unik untuk MyISAM. Bertanya tentang mengapa selalu jauh lebih baik daripada menyerah dan mendesain ulang.
RolandoMySQLDBA

Jawaban:


12

Ini tampaknya akan bekerja dengan MyISAM sebagai mesin penyimpanan, bukan InnoDB, jika Anda bisa hidup dengan itu.

Cara lain untuk membuatnya berfungsi adalah jika Anda bertukar tempat queuedan idxdalam deklarasi kunci utama.


1

Anda juga dapat memberikan idxkunci sendiri jika Anda lebih suka memiliki yang queuepertama di PK. Perhatikan penambahan index(idx)baris:

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

Coba hapus bidang antrian dari kunci utama. Anda dapat mengindeks kolom antrian jika Anda mau


4
Jenis kekalahan seperti itu di atas meja.
Nifle

4
Apakah Anda menyadari bahwa itulah yang ingin dihindari si penanya?
jcolebrand
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.