기존 테이블에 자동 증가 ID를 추가 하시겠습니까?


82

'fname', 'lname', 'email', 'password'및 'ip'가 포함 된 기존 테이블이 있습니다. 하지만 이제는 자동 증가 열을 원합니다. 그러나 입력 할 때 :

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

다음을 얻습니다.

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

어떤 충고?:)


기존 테이블 정의를 게시 할 수 있습니까?
Taryn

출력을 게시하십시오describe users
DKSan 2013

시도했지만 테이블을 반환합니다. 무엇이 필요합니까?
Charles Jenkins

@CharlesJenkins 정답을 고를 수 있습니까?
Wadih M.

MODIFY는 다음과 같이 사용할 수도 있습니다. ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT; / * 2019 년
Vilas Joshi

답변:


131

이 시도

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

12
# 1068-다중 기본 키 정의
Charles Jenkins 2013

6
SQL Server 2008에서는 'AUTO_INCREMENT'를 'IDENTITY (1,1)'로 바꾸면 효과가있었습니다.
Greg A

13
이렇게하면 테이블의 마지막 열로 ID 열이 추가됩니다. FIRST쿼리에 추가 하여이 테이블에서 첫 번째로 만듭니다.
Tobias Baumeister 2016 년

5
@CharlesJenkins "다중 기본 키"오류를 방지하려면 새 기본 키를 정의하기 전에 기존 기본 키를 삭제하십시오.ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

6
첫 번째 열로 만들려면 FIRST예를 들면 다음과 같습니다.ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza

73

자동 ID가으로 사용되는지 여부에 신경 쓰지 않는다면 PRIMARY KEY그냥 할 수 있습니다.

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

나는 이것을했고 그것은 대우를 받았다.


1
이것은 나를 위해 일했으며 auto_increment id 열을 기본 키로 설정했습니다.
reflexiv

3
은 무엇 않는 FIRST존재합니까?
Cees Timmerman

12
@Cees Timmerman : 키워드 FIRST는 새 열이 테이블의 첫 번째 열이됨을 나타냅니다. 또는 AFTER existent_col_name을 사용하여 특정 위치를 지정할 수 있습니다. FIRST와 AFTER가 모두 사용되지 않으면 모든 현재 열 뒤에 새 열이 추가됩니다.
Ruben Ramirez Padron 2015 년

PK가 아닌 id에 대한 색인을 작성하려면 어떻게해야합니까?
morpheus

@morpheus는 그 자체로 인덱스 인 UNIQUE 인덱스를 추가합니다. 나는 PK가 아닌 id라는 열을 갖는 것을 좋아하지 않습니다.
Arth

34

기존 테이블에 AUTO_INCREMENT를 추가하려면 다음 SQL 명령을 실행해야합니다.

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
작동하지 않았습니다! 이 오류가 발생했습니다. # 1068-다중 기본 키 정의
Charles Jenkins 2013

4
Multiple primary key defined이미 테이블에 기본 키가 있기 때문에 얻을 수 있습니다. 테이블에는 하나의 기본 키만있을 수 있습니다. 기본 키가없는 경우 테이블에서 위의 명령을 다시 시도하십시오
cchi

3
"다중 기본 키"오류를 방지하려면 새 기본 키를 정의하기 전에 기존 기본 키를 삭제하십시오.ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

21

먼저 테이블의 기본 키를 제거해야합니다.

ALTER TABLE nametable DROP PRIMARY KEY

이제 자동 증가를 추가 할 수 있습니다.

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

삭제할 수없는 경우 ID를 추가합니다. 얻을 것이다Duplicate column name 'id'
존 조에게

1
@JohnJoe, 이미 id 열이 있기 때문입니다. 이것을 시도하십시오 : ALTER TABLE nametable DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

글쎄, 당신은 먼저 드롭 auto_increment하고 primary key당신은 다음과 같이 당신의 것을 추가해야합니다.

-- 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
이 오류가 발생했습니다. # 1064-SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 'LTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)'근처에서 사용할 올바른 구문을 확인하십시오.
Charles Jenkins

당신의 코드를 봐라 u는 그것을 놓친 LTER가 아니라
ALter가 아니라,

감사합니다. 이제이 오류가 발생했습니다. # 1064-SQL 구문에 오류가 있습니다. 3 행에서 'ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)'근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 죄송합니다!
찰스 젠킨스

알았습니다 : # 1064-SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 1 행의 '(id)'근처에서 사용할 올바른 구문을 확인하십시오.
Charles Jenkins

글쎄 당신은 내 대답에서 그 단계를 따를 수 있습니다
echo_Me

12

다음 명령을 실행하는 경우 :

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

그러면 오류가 표시됩니다.

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

이 명령은 id기존 테이블에 이름이 지정된 새 열을 추가하려고하기 때문 입니다.

기존 열을 수정하려면 다음 명령을 사용해야합니다.

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

기존 열 제약 조건을 변경하는 데 작동합니다 ....!


6

테이블의 기본 키가 있으면 삭제하십시오.

 ALTER TABLE `tableName` DROP PRIMARY KEY;

테이블에 자동 증가 열 추가 :

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

기본 키로 고려할 열을 수정합니다.

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

5

ADD를 MODIFY로 변경하면 작동합니다!

바꾸다

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

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

정수 매개 변수는 내 기본 SQL 설정을 기반으로합니다.


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

0

열이 다른 기존 기본 키를 확인하십시오. 그렇다면 다음을 사용하여 기본 키를 삭제하십시오.

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

그런 다음 쿼리를 그대로 작성하십시오.


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

이 시도. 기본 키를 삭제할 필요가 없습니다.


0

PostgreSQL의 경우 auto_increment 대신 SERIAL을 사용해야합니다.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

-1

다음과 같이 진행하십시오.

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE yourtable add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id (Id)

테이블이 표시되고 AutoInc가 업데이트됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.