คอลัมน์อัตโนมัติสามารถมีได้เพียงคอลัมน์เดียว


105

ฉันจะแก้ไขข้อผิดพลาดจาก MySQL ได้อย่างไร 'คุณสามารถมีคอลัมน์การเพิ่มอัตโนมัติได้เพียงคอลัมน์เดียว'

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

คำตอบ:


120

MySQL ของฉันแจ้งว่า "นิยามตารางไม่ถูกต้องมีคอลัมน์อัตโนมัติได้เพียงคอลัมน์เดียวและต้องกำหนดเป็นคีย์ " ดังนั้นเมื่อฉันเพิ่มคีย์หลักตามด้านล่างมันก็เริ่มทำงาน:

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL,
   primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

7
แนวทางปฏิบัติที่ถูกต้องคืออะไรหากคอลัมน์เป็นส่วนหนึ่งของคีย์ผสม
Nubcake

ไวยากรณ์เมื่อแก้ไขตารางคืออะไร?
Mike Harrison

3
@MikeHarrison ดูเหมือนว่าคุณจะใส่ได้ ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

35

ข้อความแสดงข้อผิดพลาดแบบเต็มดังขึ้น:

ข้อผิดพลาด 1075 (42000): นิยามตารางไม่ถูกต้อง สามารถมีคอลัมน์อัตโนมัติได้เพียงคอลัมน์เดียวและต้องกำหนดเป็นคีย์

เพิ่มลงprimary keyในauto_incrementฟิลด์:

CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

13

โปรดทราบว่า "คีย์" ไม่ได้แปลว่าคีย์หลักเสมอไป สิ่งนี้จะได้ผล:

CREATE TABLE book (
    isbn             BIGINT NOT NULL PRIMARY KEY,
    id               INT    NOT NULL AUTO_INCREMENT,
    accepted_terms   BIT(1) NOT NULL,
    accepted_privacy BIT(1) NOT NULL,
    INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

นี่เป็นตัวอย่างที่สร้างขึ้นและอาจไม่ใช่แนวคิดที่ดีที่สุด แต่อาจมีประโยชน์มากในบางกรณี


สิ่งนี้ช่วยฉันในสถานการณ์ที่ฉันต้องการกำหนดคีย์ผสมเพื่อให้อัปเดตได้ง่าย แต่ฉันก็ต้องการมี ID ที่เพิ่มขึ้นโดยอัตโนมัติเพื่อจุดประสงค์ในการดีบัก มีอะไรบ้างที่ฉันควรระวังในแง่ของความเสี่ยงนอกเหนือจากการเขียนที่ช้าลงเล็กน้อย
Mattias Martens

2
@ แมทเทียสไม่ฉันไม่เชื่อว่ามีความเสี่ยงใด ๆ สิ่งนี้ได้รับการสนับสนุนโดยเจตนาโดยคอลัมน์อัตโนมัติเป็นคีย์หลักตามแบบแผนเท่านั้น (และเพื่อความเรียบง่าย)
Matthew อ่าน

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