2011-08-05 57 views
53

Tôi đã tạo một bảng trong MySQL với trên cột itemID. Sau khi tạo bảng, bây giờ tôi muốn thay đổi cột này thành AUTOINCREMENT. Làm thế nào điều này có thể được thực hiện bằng cách sử dụng báo cáo ALTER?ALTER bảng - thêm AUTOINCREMENT trong MySQL

Bảng định nghĩa:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

Tôi đang sử dụng đoạn mã sau nhưng nó được ném lỗi: cú pháp không chính xác.

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 
+0

Duplicate của: http://stackoverflow.com/questions/4795382/mysql-add-auto-increment-to-primary-key – lepe

+3

'AUTOINCREMENT' có một dấu gạch dưới: 'AUTO_INCREMENT' .... – Pacerier

Trả lời

81
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED, 
    itemname VARCHAR(50) 
); 

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

DESC ALLITEMS; 

INSERT INTO ALLITEMS(itemname) 
VALUES 
    ('Apple'), 
    ('Orange'), 
    ('Banana'); 

SELECT 
    * 
FROM 
    ALLITEMS; 

tôi đã nhầm lẫn với CHANGEMODIFY từ khóa trước khi quá:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

ALTER TABLE ALLITEMS MODIFY itemid INT(5); 

Trong khi chúng ta đang có, cũng lưu ý rằng AUTO_INCREMENT cũng có thể bắt đầu với một số được xác định trước:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+1

Tôi đã xác định danh tính trong SQL Server 2012 nhưng tôi đang cố gắng chuyển một số giá trị cho db. Vì vậy, tại nơi đó (tự động tăng) những gì tôi cần phải vượt qua trong VS 2010 ?? –

+2

ALTER TABLE ALLITEMS THAY ĐỔI itemid itemid INT (10) AUTO_INCREMENT. Bạn không cần phải chỉ định "PRIMARY KEY". Nó có thể dẫn đến lỗi: "Nhiều khóa chính được xác định". Bên cạnh đó, câu trả lời tuyệt vời! – lepe

+0

@ThinkCode Khi nào sử dụng 'CHANGE' và' MODIFY COLUMN'? –

15

Cú pháp:

ALTER TABLE `table1` CHANGE `itemId` `itemId` INT(11) NOT NULL AUTO_INCREMENT 

Nhưng bảng cần một phím định nghĩa (key cũ chính trên ItemID).

+1

gì sự khác biệt giữa 'ex primary key' và' primary key' trên itemid? – Thufir

10
ALTER TABLE `ALLITEMS` 
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; 
+2

Đây phải là câu trả lời được chấp nhận.Rất hiếm khi ai có nhu cầu sử dụng các cột id (đã ký) âm. –

2
ALTER TABLE allitems 
CHANGE itemid itemid INT(10) AUTO_INCREMENT; 
1
ALTER TABLE tblcatalog 
    CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST; 
-1
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY; 
+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm giải thích] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Ngoài ra, hãy cố gắng không gắn mã của bạn với các nhận xét giải thích vì điều này làm giảm khả năng đọc của cả mã và giải thích! – FrankerZ

1

cú pháp cơ bản để thêm một PRIMARY KEY AUTO_INCREMENT để bàn hiện có của OP:

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY; 

Hoặc cho một bảng mới, đây là ví dụ cú pháp từ the docs:

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

Bẫy và điều cần lưu ý:

  • Cột AUTO_INCREMENT phải có chỉ mục trên cột. (Thông thường, bạn sẽ muốn nó là khóa CHÍNH, nhưng MySQL không yêu cầu điều này.)
  • Thường là một ý tưởng hay để tạo các cột AUTO_INCREMENTUNSIGNED của bạn. Từ các tài liệu:

    Use the UNSIGNED attribute if possible to allow a greater range.

  • Khi sử dụng một điều khoản CHANGE hoặc MODIFY để thực hiện một cột AUTO_INCREMENT (hoặc thực sự bất cứ khi nào bạn sử dụng một điều khoản CHANGE hoặc MODIFY) bạn nên cẩn thận để bao gồm tất cả các từ bổ nghĩa cho cột, như NOT NULL hoặc UNSIGNED, hiển thị trong định nghĩa bảng khi bạn gọi SHOW CREATE TABLE yourtable. Các công cụ sửa đổi này sẽ bị mất theo cách khác.
Các vấn đề liên quan