Vấn đề truy vấn: chỉ có thể có một cột tự động


10

Ai đó có thể vui lòng cho tôi biết những gì sai với định nghĩa bảng này.
phiên bản mysql là 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
Tôi thích câu hỏi này (+1 cho bạn) vì nó trình bày một gotcha MySQL duy nhất cho MyISAM. Hỏi về lý do tại sao luôn tốt hơn nhiều so với từ bỏ và thiết kế lại.
RolandoMySQLDBA

Câu trả lời:


12

Điều này rõ ràng sẽ hoạt động với MyISAM như một công cụ lưu trữ, không phải InnoDB, nếu bạn có thể sống với điều đó.

Một cách khác để làm cho nó hoạt động là nếu bạn trao đổi địa điểm queueidxtrong khai báo khóa chính.


1

Bạn cũng có thể cung cấp idxkhóa riêng nếu bạn muốn có queueđầu tiên trong PK. Lưu ý việc thêm index(idx)dòng:

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

Hãy thử loại bỏ trường hàng đợi khỏi khóa chính. Bạn có thể lập chỉ mục cột hàng đợi nếu bạn muốn


4
Đó là loại đánh bại điểm của bảng.
Nifle

4
Bạn có nhận ra đó là những gì người hỏi đang cố tránh không?
jcolebrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.