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

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



답변

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

ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;

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


답변

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


답변

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

$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당신이 때 업데이트 동일해야합니다 선택합니다.


답변

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

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

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


답변

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

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


답변

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

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


답변

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