Thêm ID tự động tăng dần vào bảng hiện có?


82

Tôi có một bảng từ trước, chứa 'fname', 'lname', 'email', 'password' và 'ip'. Nhưng bây giờ tôi muốn có một cột tăng tự động. Tuy nhiên, khi tôi nhập:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Tôi nhận được như sau:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Có lời khuyên nào không? :)


bạn có thể đăng định nghĩa bảng hiện có của bạn?
Taryn

vui lòng đăng đầu ra củadescribe users
DKSan

đã thử điều đó, nhưng nó chỉ trả về bảng. bạn cần gì?
Charles Jenkins

@CharlesJenkins Bạn có thể chọn câu trả lời chính xác không?
Wadih M.

MODIFY cũng có thể được sử dụng như: Người dùng ALTER TABLE id MODIFY int NOT NULL AUTO_INCREMENT; / * Ngày tháng 8 năm 2019 * /
Vilas Joshi

Câu trả lời:


131

Thử đi

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

12
# 1068 - Nhiều khóa chính được xác định
Charles Jenkins

6
Trong SQL Server 2008, thay thế 'AUTO_INCREMENT' bằng 'IDENTITY (1,1)' phù hợp với tôi.
Greg A

13
Lưu ý rằng điều này thêm cột ID làm cột cuối cùng trong bảng. Thêm FIRSTvào truy vấn để làm cho nó trở thành truy vấn đầu tiên trong bảng này.
Tobias Baumeister

5
@CharlesJenkins Để tránh lỗi này "Nhiều tiểu học then chốt", thả các khóa chính hiện có trước khi xác định cái mới:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean Bean

6
Để biến nó thành cột đầu tiên, hãy sử dụng FIRSTví dụ:ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza

72

Nếu bạn không quan tâm đến việc id tự động được sử dụng như thế nào PRIMARY KEY, bạn có thể làm

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

Tôi vừa làm điều này và nó có tác dụng.


1
Điều này phù hợp với tôi và đặt cột id auto_increment làm khóa chính.
phản xạ

3
Làm gì FIRSTở đó?
Cees Timmerman

12
@Cees Timmerman: Từ khóa FIRST cho biết cột mới sẽ là cột đầu tiên trong bảng. Ngoài ra, bạn có thể chỉ định một vị trí cụ thể bằng cách sử dụng AFTER hadent_col_name. Nếu cả FIRST và AFTER đều không được sử dụng thì cột mới sẽ được thêm vào sau tất cả các cột hiện tại.
Ruben Ramirez Padron

Điều gì sẽ xảy ra nếu tôi muốn tạo chỉ mục trên id nhưng không phải là PK?
morpheus

@morpheus này thêm một chỉ mục DUY NHẤT là một chỉ mục của chính nó. Tôi không thích có một cột được gọi là id không phải là một PK.
Arth

34

Nếu bạn muốn thêm AUTO_INCREMENT trong bảng hiện có, cần chạy lệnh SQL sau:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
điều đó đã không hoạt động! Gặp lỗi này: # 1068 - Nhiều khóa chính được xác định
Charles Jenkins

4
bạn nhận được Multiple primary key definedvì bạn đã có khóa chính trên bảng. Một bảng chỉ có thể có một khóa chính. Thử lại lệnh trên trên bảng khi nó không có khóa chính
cchi

3
Để tránh lỗi này "Nhiều tiểu học then chốt", thả các khóa chính hiện có trước khi xác định cái mới:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean Bean

21

Trước tiên, bạn phải xóa khóa chính của bảng

ALTER TABLE nametable DROP PRIMARY KEY

và bây giờ bạn có thể thêm tự động tăng ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

không thể giảm, sau đó THÊM id. Sẽ nhận đượcDuplicate column name 'id'
John Joe

1
@JohnJoe, đó là vì bạn đã có cột id. Hãy thử điều này: ALTER TABLE nametable thả PRIMARY KEY, sửa đổi COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

Vâng, trước tiên bạn phải bỏ auto_incrementprimary keybạn có và sau đó thêm của bạn, như sau:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

1
gặp lỗi này: # 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'Người dùng BẢNG LTER THÊM id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' tại dòng 1
Charles Jenkins

hãy xem mã của bạn mà bạn đã đăng nó bỏ sót LTER chứ không phải ALter, hãy đảm bảo rằng bạn đã sao chép tất cả
echo_Me

cảm ơn, nhưng bây giờ tôi gặp lỗi này: # 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' ở dòng 3 xin lỗi!
Charles Jenkins,

nhận được điều này: # 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '(id)' tại dòng 1
Charles Jenkins

bạn có thể làm theo các bước đó trong câu trả lời của tôi
echo_Me

12

Nếu bạn chạy lệnh sau:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Điều này sẽ cho bạn thấy lỗi:

ERROR 1060 (42S21): Duplicate column name 'id'

Điều này là do lệnh này sẽ cố gắng thêm cột mới có tên idvào bảng hiện có.

Để sửa đổi cột hiện có, bạn phải sử dụng lệnh sau:

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Điều này sẽ hoạt động để thay đổi ràng buộc cột hiện có ....!


6

Xóa khóa chính của bảng nếu nó tồn tại:

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Thêm cột tăng tự động vào bảng:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

Sửa đổi cột mà chúng tôi muốn coi là khóa chính:

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

5

Chỉ cần thay đổi ADD thành MODIFY và nó sẽ hoạt động!

Thay thế

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

Đến

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

3
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

tham số số nguyên dựa trên cài đặt sql mặc định của tôi, chúc một ngày tốt lành


2
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

0

Kiểm tra khóa chính đã tồn tại với cột khác. Nếu có, hãy bỏ khóa chính bằng cách sử dụng:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

và sau đó viết truy vấn của bạn như nó vốn có.


0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

Thử đi. Không cần bỏ khóa chính của bạn.


0

Đối với PostgreSQL, bạn phải sử dụng SERIAL thay vì auto_increment.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

-1

Tiến hành như vậy:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE bàn của bạn DROP KEY CHÍNH

Add the new column like that

ALTER TABLE bảng của bạn thêm cột Id INT NOT NULL AUTO_INCREMENT FIRST, THÊM Id KEY chính (Id)

Bảng sẽ được hiển thị và AutoInc được cập nhật.

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.