Thay đổi một cột MySQL thành AUTO_INCREMENT


194

Tôi đang cố gắng sửa đổi một bảng để tạo cột khóa chính của nó AUTO_INCREMENTsau thực tế. Tôi đã thử SQL sau, nhưng nhận được thông báo lỗi cú pháp.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Tôi đang làm gì đó sai hay điều này là không thể?

+ -------------------- +
| PHIÊN BẢN () |
+ -------------------- +
| 5.0,75-0ubfox10.2 |
+ -------------------- +

Câu trả lời:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
Tôi tò mò tại sao bạn lại đề xuất INT (4). Bất kỳ lý do cụ thể nào?
Steven Oxley

3
@Steven Oxley vì tôi tuyên bố bảng của tôi theo cách đó.
C. Ross

30
Việc chỉ định một số giữa dấu ngoặc đơn chính xác không có gì (cũng ok, hầu như không có gì) cho các kiểu số nguyên MySQL. Điều duy nhất có thể bị ảnh hưởng bởi số lượng là chiều rộng hiển thị và tùy thuộc vào khách hàng để làm điều đó. Nhưng đừng bị lừa dối và nghĩ rằng nó hoạt động giống như đối với các loại VARCHAR và DECIMAL - trong những trường hợp đó, lượng dữ liệu bạn có thể lưu trữ trong đó thực sự được chỉ định, trong khi một hương vị đặc biệt của INT luôn cho phép lưu trữ chính xác cùng một phạm vi giá trị
Roland Bouman

Tôi luôn gặp lỗi chính trong khi thực hiện thao tác này, vì vậy tôi có lỗi này là: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE tài liệu DROP PRIMARY KEY; ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT KHÔNG NULL; THIẾT LẬP FOREIGN_KEY_CHECKS = 1;
Fernando

Điều này dường như không hoạt động trong MySQL vì bạn cần đặt cột làm khóa chính vì chỉ một cột được phép là auto_increment (cũng xem câu trả lời của Roland Bouman bên dưới
charlchad

74

Roman đúng, nhưng lưu ý rằng cột auto_increment phải là một phần của KHÓA CHÍNH hoặc KHÓA ĐỘC ĐÁO (và trong gần như 100% các trường hợp, nó phải là cột duy nhất tạo nên KHÓA CHÍNH):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1. Khóa chính được yêu cầu nếu không được xác định tại thời điểm tạo bảng.

1
Ngoài ra, điều này có nghĩa là dữ liệu trong cột đó cần phải là duy nhất
Umair Malhi

10

Trong trường hợp của tôi, nó chỉ hoạt động khi tôi đặt not null. Tôi nghĩ rằng đây là một hạn chế.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

SQL để làm điều này sẽ là:

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

Có một vài lý do mà SQL của bạn có thể không hoạt động. Trước tiên, bạn phải chỉ định lại kiểu dữ liệu ( INTtrong trường hợp này). Ngoài ra, cột bạn đang cố gắng thay đổi phải được lập chỉ mục (nó không phải là khóa chính, nhưng thông thường đó là những gì bạn muốn). Hơn nữa, chỉ có thể có một AUTO_INCREMENTcột cho mỗi bảng. Vì vậy, bạn có thể muốn chạy SQL sau (nếu cột của bạn không được lập chỉ mục):

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

Bạn có thể tìm thêm thông tin trong tài liệu MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html để sửa đổi cú pháp cột và http://dev.mysql.com/doc /refman/5.1/en/create-table.html để biết thêm thông tin về việc chỉ định các cột.


6

Bạn phải chỉ định loại cột trước lệnh auto_increment, tức là ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.


1
Nó sẽ làMODIFY COLUMN
shxfee

5

AUTO_INCREMENT là một phần của kiểu dữ liệu của cột, bạn phải xác định lại kiểu dữ liệu hoàn chỉnh cho cột:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intlấy làm ví dụ, bạn nên đặt nó thành loại cột đã có trước đó)


3

Bạn có thể làm như thế này:

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

Điều này dường như chỉ là một sự lặp lại của tất cả các câu trả lời khác.
Pang

2

AUTO_INCREMENT là một phần của kiểu dữ liệu của cột, bạn phải xác định lại kiểu dữ liệu hoàn chỉnh cho cột:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int lấy làm ví dụ, bạn nên đặt nó thành loại cột đã có trước đó)


2

Bạn có thể sử dụng truy vấn sau để tạo document_id để tăng tự động

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Bạn cũng nên tạo khóa chính document_id

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
Lưu ý rằng nếu cột đó đã là khóa chính, bạn không thể khai báo lại ở đó, nếu không, nó sẽ báo lỗi về nhiều khóa chính (bạn mong đợi nó sẽ thông minh hơn một chút và thấy rằng đó là khóa chính giống như tôi đoán) . Vì vậy, trong trường hợp đó, bạn chỉ cần bỏ qua KHÓA CHÍNH và nó không ảnh hưởng đến cài đặt khóa chính hiện có trên cột đó
George Birbilis

2

Dưới đây tuyên bố hoạt động. Lưu ý rằng bạn cần đề cập lại kiểu dữ liệu cho tên cột (phân phối lại kiểu dữ liệu của cột trước đó).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

Nếu không có công trình nào ở trên hãy thử điều này. Đây là những gì tôi đã làm trong MYSQL và vâng, bạn cần phải viết tên cột (document_id) hai lần.

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

1

Để sửa đổi cột trong mysql, chúng tôi sử dụng thay đổi và sửa đổi từ khóa. Giả sử chúng ta đã tạo một bảng như:

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

Bây giờ chúng tôi muốn sửa đổi loại id cột thành số nguyên với mức tăng tự động. Bạn có thể làm điều này với một lệnh như:

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

1

Cú pháp bảng trước:

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

Để thay đổi Giao dịch thành tăng tự động, hãy sử dụng truy vấn này

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;



0

Khi bạn xác định lại cột một lần nữa, bạn phải xác định lại kiểu dữ liệu một lần nữa và thêm auto_increment cho nó vì đây là một phần của kiểu dữ liệu.

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

0

Đặt cột làm khóa chính và auto_increment cùng một lúc:

  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>


-3

Sử dụng các truy vấn sau:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
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.