기존 테이블에 자동 증분 기본 키 삽입


157

기본 키 또는 auto_increment 열이없는 테이블을 변경하려고합니다. 기본 키 열을 추가하는 방법을 알고 있지만 기본 키 열에 데이터를 자동으로 삽입 할 수 있는지 궁금합니다 (이미 DB에 500 개의 행이 있고 ID를주고 싶지만 수동으로하고 싶지 않습니다) . 이견있는 사람? 고마워


2
alter table키를 추가 하기 위해 쉽게 할 수 있지만 MySQL은 아직 키가없는 필드의 ID를 생성하지 않습니다. 기존 필드를 수동으로 업데이트 한 다음 새 자동 증분이 올바른 오프셋에서 시작하는지 확인해야합니다. 기본값은 '1'이며 어쨌든 중복 키 오류가 발생합니다.
Marc B

3
@MarcB 방금 테스트했으며 실제로 1에서 시작하는 기존 행의 ID를 삽입했습니다.
Michael Berkowski

답변:


253

열을 ALTER TABLE추가 하는 진술 PRIMARY KEY은 내 테스트에서 올바르게 작동합니다.

ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;

테스트 목적으로 작성된 임시 테이블에서 위의 명령문 AUTO_INCREMENT id은 1로 시작하여 테이블에있는 기존의 각 행에 대해 열을 작성하고 자동 증가 값을 삽입했습니다.


1
네, 이것은 나의 경험이었습니다. auto_increment ID를 채우기 위해 별도의 스크립트를 실행할 필요가 없습니다 ...
Mike Purcell

1
lol .. 감사합니다. 내 잘못이야. 녹색 마크는 구현하기가 쉽기 때문에 당신을위한 것입니다. : D
FlyingCat

53
그것을 첫 번째 열을하려면, 사용 FIRSTALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
데이비드 토마스

1
@Nikkie SQLite의 메커니즘은 매우 다릅니다. 여기에서 제안을 찾으실 수 있습니다 stackoverflow.com/questions/946011/sqlite-add-primary-key
Michael Berkowski

1
@WijaySharma 자동 증가로 행을 생성하고 ID로 즉시 검색해야하는 경우 MySQL은 LAST_INSERT_ID()해당 값을 제공 SELECT * FROM table_name WHERE id = LAST_INSERT_ID()하며 대부분의 프로그래밍 언어 API는 응용 프로그램 코드에서 해당 값을 반환하는 함수 / 방법을 제공합니다.
Michael Berkowski

51

id, no와 같은 자동 증분 열이 없다면 다음 쿼리를 사용하여 추가 할 수 있습니다.

ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

열인 경우 다음 쿼리를 사용하여 자동 증분으로 변경하십시오.

 ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY

1
FIRST끝에 무엇을 합니까?
치매

1
id마지막 행과 반대로 새 열을 테이블에서 첫 번째로 만드는 것이 기본 동작입니다.
fmalina

잘 작동합니다! 감사!
Majedur Rahaman

4

예, 이와 같은 일이 최선을 다하지는 않지만 백업을 원할 수도 있습니다.

$get_query = mysql_query("SELECT `any_field` FROM `your_table`");

$auto_increment_id = 1;

while($row = mysql_fetch_assoc($get_query))
{
  $update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
  $auto_increment_id++;
}

하여 있음을 통지 any_field당신이 때 업데이트 동일해야합니다 선택합니다.


4

나 같은 Multiple primary key defined오류가 발생 하는 경우 다음을 시도하십시오.

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

MySQL v5.5.31에서는 id열을 기본 키로 설정하고 각 행에 증분 값을 채웠습니다 .


2

내가 찾는 가장 쉽고 빠른 것은

ALTER TABLE mydb.mytable 
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);

2

이 명령을 적용하여 기존의 비 증가 기본 키를 사용하여 테이블을 가져오고 테이블에 증분 기본 키를 추가하고 다음을 사용하여 이전 및 새 키를 복합 기본 키로 사용하여 새 복합 기본 키를 만들 수 있습니다. 암호:

DROP TABLE  IF EXISTS SAKAI_USER_ID_MAP;

CREATE TABLE SAKAI_USER_ID_MAP (
       USER_ID             VARCHAR (99) NOT NULL,
       EID                 VARCHAR (255) NOT NULL,
       PRIMARY KEY (USER_ID)
);

INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');

ALTER TABLE  SAKAI_USER_ID_MAP 
  DROP PRIMARY KEY, 
  ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST, 
  ADD PRIMARY KEY ( _USER_ID, USER_ID );

이 작업이 완료되면 _USER_ID 필드가 존재하며 예상 한대로 기본 키의 모든 숫자 값을 갖습니다. 상단에 "DROP TABLE"이 있으면 여러 번 실험 해 볼 수 있습니다.

내가 일할 수 없었던 것은 이미 USER_ID 필드를 가리키는 들어오는 FOREIGN KEY가있는 상황입니다. 다른 테이블에서 들어오는 외래 키를 사용하여보다 복잡한 예를 수행하려고하면이 메시지가 나타납니다.

#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)

ALTER 테이블을 수행하기 전에 모든 외래 키를 분리 한 다음 나중에 다시 작성해야한다고 생각합니다. 그러나 지금은 다른 사람들 이이 상황에 처한 경우를 대비 하여이 솔루션을 원래 질문의 더 도전적인 버전으로 공유하고 싶었습니다.


0

테이블을 내 보낸 다음 테이블을 비운 다음 필드를 고유 한 INT로 추가 한 다음 AUTO_INCREMENT로 변경 한 다음 이전에 내 보낸 테이블을 다시 가져 오십시오.


0

명령을 사용하여 시퀀스 번호를 가질 수있는 기존 테이블에 새 기본 키 열을 추가 할 수 있습니다.

ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
user1717828

0

나는 같은 문제에 직면하여 내가 한 일에 기본 키의 필드를 삭제 한 다음 다시 작성하여 자동 증분인지 확인했습니다. 그것은 나를 위해 일했다. 나는 그것이 다른 사람들을 돕기를 바랍니다


0

ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;

여기 tableName 은 테이블 이름입니다.

tableName 은 기본 이름이며 수정 해야하는 열 이름입니다.

MEDIUMINT 는 기존 기본 키의 데이터 유형입니다.

AUTO_INCREMENT null이 아닌 경우 auto_increment 만 추가하면됩니다.

기본 키를 auto_increment로 만듭니다 .......

이것이 도움이되기를 바랍니다 :)


1
설명 을 편집 하고 추가 하면 유용합니다 .
Shashanth

-1

기존 필드 (이 예에서는 이름)를 대체하여 PHP를 기본 키로 만드는 방법은 무엇입니까? 물론 테이블에 추가 'id'필드를 추가하지 않아도됩니다.

현재 생성 된 테이블-발견 된 레코드 수 : 4 이름 VARCHAR (20) 예 품종 VARCHAR (30) 예 색상 VARCHAR (20) 예 무게 SMALLINT (7) 예

이것은 최종 결과를 찾았습니다 (표 설명).

발견 된 레코드 수 : 4 이름 VARCHAR (20) 아니오 PRI 품종 VARCHAR (30) 예 색상 VARCHAR (20) 예 무게 SMALLINT (7) 예

이것을 얻는 대신-

발견 된 레코드 수 : 5 id int (11) 아니오 PRI 이름 VARCHAR (20) 예 품종 VARCHAR (30) 예 색상 VARCHAR (20) 예 무게 SMALLINT (7) 예

시도 후 ..

$ query = "ALTER TABLE 경주마 추가 ID INT NOT NULL AUTO_INCREMENT 첫 번째, 기본 키 추가 (id)";

이것을 얻는 방법? -

발견 된 레코드 수 : 4 이름 VARCHAR (20) 아니오 PRI 품종 VARCHAR (30) 예 색상 VARCHAR (20) 예 무게 SMALLINT (7) 예

즉, INSERT / ADD. 등의 기본 키가 첫 번째 필드 레코드에 추가됩니다 (앞서 언급 한대로 'id'필드를 추가하지 않음).

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