기본 키 또는 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로 변경 한 다음 이전에 내 보낸 테이블을 다시 가져 오십시오.