แก้ไขคอลัมน์ MySQL ให้เป็น AUTO_INCREMENT


194

ฉันกำลังพยายามปรับเปลี่ยนตารางเพื่อสร้างคอลัมน์คีย์หลักAUTO_INCREMENTหลังจากข้อเท็จจริง ฉันลอง SQL ต่อไปนี้ แต่ได้รับการแจ้งเตือนข้อผิดพลาดทางไวยากรณ์

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

ฉันกำลังทำอะไรผิดหรือเป็นไปไม่ได้?

+ -------------------- +
| VERSION () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +

คำตอบ:


380
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
ฉันอยากรู้ว่าทำไมคุณถึงแนะนำ INT (4) มีเหตุผลพิเศษไหม?
Steven Oxley

3
@ Steven Oxley เพราะฉันประกาศตารางของฉันในแบบนั้น
C. Ross

30
การระบุตัวเลขระหว่างวงเล็บไม่ได้ทำอะไรเลย (โอเคเกือบไม่มีอะไรเลย) สำหรับชนิดจำนวนเต็ม MySQL สิ่งเดียวที่อาจได้รับอิทธิพลจากจำนวนนั้นคือความกว้างของการแสดงผลและขึ้นอยู่กับลูกค้าที่จะทำเช่นนั้น แต่อย่าถูกหลอกและคิดว่ามันใช้งานได้ดีเหมือน VARCHAR และ DECIMAL ประเภท - ในกรณีเหล่านั้นปริมาณข้อมูลที่คุณสามารถจัดเก็บในนั้นมีการระบุไว้จริง ๆ ในขณะที่รสชาติของ INT เฉพาะช่วยให้สามารถจัดเก็บที่แน่นอนได้เสมอ ช่วงค่าเดียวกัน
Roland Bouman

ฉันได้รับข้อผิดพลาดคีย์หลักเสมอในขณะที่ทำการดำเนินการดังนั้นฉันมีสิ่งนี้ทำ: SET FOREIGN_KEY_CHECKS = 0; แก้ไขเอกสารตาราง DROP คีย์หลัก; แก้ไขตารางเอกสาร MODUMY COLUMN document_id INT คีย์หลัก AUTO_INCREMENT ไม่เป็นโมฆะ SET FOREIGN_KEY_CHECKS = 1;
เฟอร์นันโด

ดูเหมือนจะไม่ทำงานใน MySQL เพราะคุณต้องตั้งค่าคอลัมน์เป็นคีย์หลักเนื่องจากอนุญาตให้มีเพียงหนึ่งคอลัมน์เท่านั้นที่จะเป็น auto_increment (โปรดดูคำตอบของ Roland Bouman ด้านล่างนี้
charlchad

74

Roman ถูกต้อง แต่โปรดทราบว่าคอลัมน์ auto_increment จะต้องเป็นส่วนหนึ่งของคีย์หลักหรือคีย์ที่ไม่ซ้ำกัน (และในเกือบ 100% ของกรณีมันควรเป็นคอลัมน์เดียวที่สร้างคีย์หลัก):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1 ต้องการคีย์หลักหากไม่ได้กำหนดไว้ในเวลาที่สร้างตาราง

1
นอกจากนี้ยังหมายความว่าข้อมูลในคอลัมน์นั้นจำเป็นต้องมีเอกลักษณ์อยู่แล้ว
Umair Malhi

10

not nullในกรณีของฉันมันทำงานเฉพาะเมื่อใส่ ฉันคิดว่านี่เป็นข้อ จำกัด

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

SQL ในการทำเช่นนี้จะเป็น:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

มีสาเหตุสองประการที่ทำให้ SQL ของคุณไม่ทำงาน ก่อนอื่นคุณต้องระบุประเภทข้อมูลอีกครั้ง ( INTในกรณีนี้) นอกจากนี้คอลัมน์ที่คุณพยายามแก้ไขจะต้องทำดัชนี (ไม่จำเป็นต้องเป็นคีย์หลัก แต่โดยปกติจะเป็นสิ่งที่คุณต้องการ) นอกจากนี้AUTO_INCREMENTแต่ละคอลัมน์สามารถมีได้เพียงหนึ่งคอลัมน์เท่านั้น ดังนั้นคุณอาจต้องการเรียกใช้ SQL ต่อไปนี้ (หากคอลัมน์ของคุณไม่ได้จัดทำดัชนี):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.htmlเพื่อแก้ไขไวยากรณ์คอลัมน์และhttp://dev.mysql.com/doc /refman/5.1/en/create-table.htmlสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการระบุคอลัมน์


6

คุณต้องระบุชนิดของคอลัมน์ก่อนที่จะสั่งคือauto_incrementALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT


1
มันควรจะเป็นMODIFY COLUMN
shxfee

5

AUTO_INCREMENT เป็นส่วนหนึ่งของประเภทข้อมูลของคอลัมน์คุณต้องกำหนดประเภทข้อมูลที่สมบูรณ์สำหรับคอลัมน์อีกครั้ง:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intนำมาเป็นตัวอย่างคุณควรกำหนดเป็นประเภทคอลัมน์ที่มีมาก่อน)


3

คุณสามารถทำได้เช่นนี้:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

นี่ดูเหมือนจะเป็นเพียงการทำซ้ำของคำตอบอื่น ๆ ทั้งหมด
ปาง

2

AUTO_INCREMENT เป็นส่วนหนึ่งของประเภทข้อมูลของคอลัมน์คุณต้องกำหนดประเภทข้อมูลที่สมบูรณ์สำหรับคอลัมน์อีกครั้ง:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int เป็นตัวอย่างคุณควรกำหนดให้เป็นประเภทคอลัมน์ที่มีมาก่อน)


2

คุณสามารถใช้แบบสอบถามต่อไปนี้เพื่อให้ document_id เพิ่มขึ้นโดยอัตโนมัติ

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

มันต้องการที่จะทำให้ document_id คีย์หลักเช่นกัน

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
โปรดทราบว่าหากคอลัมน์นั้นเป็นคีย์หลักอยู่แล้วคุณไม่สามารถประกาศได้อีกที่นั่นจะทำให้เกิดข้อผิดพลาดเกี่ยวกับคีย์หลักหลายรายการ (คุณคาดหวังว่ามันจะฉลาดกว่านี้อีกเล็กน้อยและดูว่าเป็นคีย์หลักเดียวกันที่ฉันเดา) . ดังนั้นในกรณีนี้คุณเพียงแค่ข้ามคีย์หลักและจะไม่มีผลกับการตั้งค่าคีย์หลักที่มีอยู่ในคอลัมน์นั้น
George Birbilis

2

คำสั่งด้านล่างใช้งานได้ โปรดทราบว่าคุณต้องพูดถึงประเภทข้อมูลอีกครั้งสำหรับชื่อคอลัมน์ (ประกาศประเภทข้อมูลที่คอลัมน์ก่อนหน้านี้)

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

หากไม่มีงานใด ๆ ข้างต้นให้ลองใช้วิธีนี้ นี่คือสิ่งที่ฉันทำใน MySQL และใช่คุณต้องเขียนชื่อคอลัมน์ (document_id) สองครั้ง

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

1

ในการแก้ไขคอลัมน์ใน mysql เราใช้แก้ไขและแก้ไขคำค้นหา สมมติว่าเราได้สร้างตารางเช่น:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

ตอนนี้เราต้องการแก้ไขชนิดของ id คอลัมน์เป็นจำนวนเต็มพร้อมการเพิ่มอัตโนมัติ คุณสามารถทำได้ด้วยคำสั่งเช่น:

alter table emp modify column id int(10) auto_increment;

1

ไวยากรณ์ตารางก่อนหน้า:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

สำหรับการเปลี่ยน TransactionId เป็นการเพิ่มอัตโนมัติให้ใช้แบบสอบถามนี้

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;



0

ในขณะที่คุณกำลังกำหนดคอลัมน์อีกครั้งคุณจะต้องระบุประเภทข้อมูลอีกครั้งและเพิ่ม auto_increment ลงไปเนื่องจากเป็นส่วนหนึ่งของประเภทข้อมูล

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

0

การตั้งค่าคอลัมน์เป็นคีย์หลักและ auto_increment ในเวลาเดียวกัน:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>


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