기본 키 또는 auto_increment 열이없는 테이블을 변경하려고합니다. 기본 키 열을 추가하는 방법을 알고 있지만 기본 키 열에 데이터를 자동으로 삽입 할 수 있는지 궁금합니다 (이미 DB에 500 개의 행이 있고 ID를주고 싶지만 수동으로하고 싶지 않습니다) . 이견있는 사람? 고마워
기본 키 또는 auto_increment 열이없는 테이블을 변경하려고합니다. 기본 키 열을 추가하는 방법을 알고 있지만 기본 키 열에 데이터를 자동으로 삽입 할 수 있는지 궁금합니다 (이미 DB에 500 개의 행이 있고 ID를주고 싶지만 수동으로하고 싶지 않습니다) . 이견있는 사람? 고마워
답변:
열을 ALTER TABLE
추가 하는 진술 PRIMARY KEY
은 내 테스트에서 올바르게 작동합니다.
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
테스트 목적으로 작성된 임시 테이블에서 위의 명령문 AUTO_INCREMENT
id
은 1로 시작하여 테이블에있는 기존의 각 행에 대해 열을 작성하고 자동 증가 값을 삽입했습니다.
FIRST
예ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
해당 값을 제공 SELECT * FROM table_name WHERE id = LAST_INSERT_ID()
하며 대부분의 프로그래밍 언어 API는 응용 프로그램 코드에서 해당 값을 반환하는 함수 / 방법을 제공합니다.
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
FIRST
끝에 무엇을 합니까?
id
마지막 행과 반대로 새 열을 테이블에서 첫 번째로 만드는 것이 기본 동작입니다.
예, 이와 같은 일이 최선을 다하지는 않지만 백업을 원할 수도 있습니다.
$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
당신이 때 업데이트 동일해야합니다 선택합니다.
이 명령을 적용하여 기존의 비 증가 기본 키를 사용하여 테이블을 가져오고 테이블에 증분 기본 키를 추가하고 다음을 사용하여 이전 및 새 키를 복합 기본 키로 사용하여 새 복합 기본 키를 만들 수 있습니다. 암호:
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 테이블을 수행하기 전에 모든 외래 키를 분리 한 다음 나중에 다시 작성해야한다고 생각합니다. 그러나 지금은 다른 사람들 이이 상황에 처한 경우를 대비 하여이 솔루션을 원래 질문의 더 도전적인 버전으로 공유하고 싶었습니다.
명령을 사용하여 시퀀스 번호를 가질 수있는 기존 테이블에 새 기본 키 열을 추가 할 수 있습니다.
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
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;
여기 tableName 은 테이블 이름입니다.
tableName 은 기본 이름이며 수정 해야하는 열 이름입니다.
MEDIUMINT 는 기존 기본 키의 데이터 유형입니다.
AUTO_INCREMENT null이 아닌 경우 auto_increment 만 추가하면됩니다.
기본 키를 auto_increment로 만듭니다 .......
이것이 도움이되기를 바랍니다 :)
기존 필드 (이 예에서는 이름)를 대체하여 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'필드를 추가하지 않음).
alter table
키를 추가 하기 위해 쉽게 할 수 있지만 MySQL은 아직 키가없는 필드의 ID를 생성하지 않습니다. 기존 필드를 수동으로 업데이트 한 다음 새 자동 증분이 올바른 오프셋에서 시작하는지 확인해야합니다. 기본값은 '1'이며 어쨌든 중복 키 오류가 발생합니다.