ปัญหาการค้นหา: สามารถมีได้เพียงคอลัมน์เดียวเท่านั้น


10

ใครช่วยบอกฉันทีว่ามีอะไรผิดปกติกับนิยามตารางนี้
รุ่น mysql คือ 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
ฉันชอบคำถามนี้ (+1 สำหรับคุณ) เพราะมันแสดง MySQL gotcha ซึ่งเป็นเอกลักษณ์ของ MyISAM การถามว่าทำไมดีกว่าการยอมแพ้และออกแบบใหม่อยู่เสมอ
RolandoMySQLDBA

คำตอบ:


12

เห็นได้ชัดว่านี่จะทำงานร่วมกับ MyISAM เป็นเครื่องมือจัดเก็บข้อมูลไม่ใช่ InnoDB หากคุณสามารถอยู่กับมันได้

อีกวิธีในการทำให้มันใช้งานได้คือถ้าคุณสลับตำแหน่งqueueและidxในการประกาศคีย์หลัก


1

คุณสามารถให้รหัสidxของตัวเองถ้าคุณต้องการที่จะมีqueueแรกใน PK สังเกตการเพิ่มของindex(idx)บรรทัด:

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

ลองลบเขตข้อมูลคิวจากคีย์หลัก คุณสามารถสร้างดัชนีคอลัมน์คิวได้หากต้องการ


4
การเอาชนะแบบนั้นเป็นจุดที่โต๊ะ
Nifle

4
คุณรู้หรือไม่ว่าผู้ถามพยายามหลีกเลี่ยงอะไร
jcolebrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.