MySQL 테이블에 기본 키를 추가하는 방법은 무엇입니까?


103

이것은 내가 시도한 것이지만 실패합니다.

alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;

누구에게 팁이 있습니까?


11
뭔가하면 실패 , 무슨 지정하는 좋은 아이디어 항상 실패 오류 메시지를받을 수 있나요 : 수단은? 어느 것 ?
Pascal MARTIN

오류 메시지는 다음과 같습니다. 다중 기본 키 정의
LMD

답변:


226

열을 추가 한 후 언제든지 기본 키를 추가 할 수 있습니다.

ALTER TABLE goods ADD PRIMARY KEY(id)

스크립트가 작동하지 않는 이유는 다음 PRIMARY KEY과 같은 단어뿐만 아니라을 지정해야합니다 PRIMARY.

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

나를 위해 그것은 말합니다 : 이것은 여러 기본 키를 정의합니다. InnoDB를 사용하고 있습니다. 참고로 이미 3 개가 있습니다.
LMD

2
나는 확실히 FIRST뒤에 넣을 것 AUTO_INCREMENT입니다. 즉, id이미 존재하는 테이블의 첫 번째 열이 될 것입니다. 그렇지 않으면 지금 쓰여진대로 테이블의 끝에 SELECT * ...
놓일

새로운 'id'열에 1 등을하는 방법
TipVisor

17

기존 컬럼

기존 열에 기본 키 제약 조건을 추가하려는 경우 이전에 나열된 모든 구문이 실패합니다.

기존 열에 기본 키 제약 조건을 추가하려면 다음 양식을 사용하십시오.

ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

1
mysql이 MODIFY를 적절한 문장으로 인식하지 못합니다 (적어도 XAMPP, InnoDB에서는)
LMD

@LMD 어떤 버전의 mysql을 사용하고 있습니까? (참고 :이 글을 게시했을 때 효과가 있다는 것을 알고 있으며 5.6이라고 생각합니다 ...하지만 확실히 기억할 수 없습니다.)
MER

1
당신에게 저처럼 작동하지 않는다면 MODIFY를 CHANGE로 바꾸면 작동합니다!
csr-nontol

12

테이블이 상당히 크면 다음 명령문을 사용하지 마십시오.

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

임시 테이블의 모든 데이터를 복사하기 때문에 테이블을 변경 한 다음 다시 복사합니다. 수동으로하는 것이 좋습니다. 테이블 이름 변경 :

rename table goods to goods_old;

기본 키와 필요한 모든 인덱스를 사용하여 새 테이블을 만듭니다.

create table goods (
    id  int(10) unsigned not null AUTO_INCREMENT
    ... other columns ...
    primary key (id)
);

이전 테이블의 모든 데이터를 새 테이블로 이동하고 키와 인덱스를 비활성화하여 복사 속도를 높입니다.

- 해당 사례 의 MyISAM 테이블 :

SET UNIQUE_CHECKS=0;
    ALTER TABLE goods DISABLE KEYS;
        INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
    ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;

또는

-InnoDB 테이블에 이것을 사용 하십시오.

SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
    INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;

~ 2 억 개의 행이있는 테이블에 PK를 추가하는 데 2000 초가 걸립니다.


이 답변을 찾기 위해 검색해야하는 시간에 놀랐습니다. 이 유용한 예제에 감사드립니다.
Ryan

4

이것이 다른 사람에게 중요한지 확실하지 않지만 데이터베이스의 첫 번째 열보다 id 테이블을 선호합니다. 그 구문은 다음과 같습니다.

ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;

첫 번째 답변보다 약간 개선되었습니다. 다른 위치에 있기를 원한다면

ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;

HTH, -ft


3

이 쿼리를 사용하십시오.

alter table `table_name` add primary key(`column_name`);

2

이 코드는 mysql db에서 작동합니다.

ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);


0

이 시도,

alter table goods add column `id` int(10) unsigned primary key auto_increment

0

나를 위해 어떤 제안도 나에게 구문 오류를 제공하지 않았으므로 phpmyadmin (version 4.9.2), (10.4.10-MariaDB)를 사용하여 시도 id하고 자동 증가 기본 키가있는 열을 추가했습니다 . Id열은 첫 번째 요소에서 멋지게 추가되었습니다.

쿼리 출력은 다음과 같습니다.

ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id);


-3

제대로 작동하려면 따옴표를 제거하십시오 ...

alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.