2016-10-27 3 views
0

여기 내 테이블 : 당신이 표에서 알 수 있듯이, idtemplate_id 기본 키입니다MySQL의 드롭 기본 키가 작동하지 않습니다

+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | bigint(20) | NO | PRI | NULL | auto_increment | 
| template_id | int(11)  | NO | MUL | NULL |    | 
| type  | smallint(6) | NO |  | 2  |    | 
| width  | varchar(100) | NO |  |   |    | 
| height  | varchar(100) | NO |  |   |    | 
+-------------+--------------+------+-----+---------+----------------+ 

하고 id는 AUTO_INCREMENT 설정이 있습니다.

내가하고 싶은 일은 tempalte_id 기본 키 속성을 삭제하는 것입니다. 여기

내가 시도 MySQL의 쿼리 문자열입니다

ALTER TABLE ts_template_size 
DROP PRIMARY KEY, 
ADD PRIMARY KEY (`id`); 

쿼리가 성공적으로 실행할 수 있지만, 아무것도 변경 보인다. 경고가없고 오류가없고 tempalte_id의 기본 키 속성이 여전히 있습니다.

어떻게 해결할 수 있습니까? 내 검색어에 무슨 문제가 있습니까? 자동 증가

ALTER TABLE ts_template_size MODIFY id INT NULL; 

에 대한

+1

가능한 복제 [SQL 키, MUL UNI 대 PRI 대 (HTTP : // 유래. com/questions/5317889/sql-keys-mul-vs-pri-vs-uni) – Dezza

+0

왜'template_id'가 기본 키라고 생각합니까? 내가 보여준 테이블 구조에서 말할 수 없습니다. – Dezza

답변

1

바꿔 놓기

ALTER TABLE ts_template_size 
DROP PRIMARY KEY; 

하고 다시 작성 :

ALTER TABLE yourtable 
ADD PRIMARY KEY (`id`); 
+0

직접 기본 키를 삭제하면 오류가 발생할 수 있습니다. 잘못된 테이블 정의입니다. 하나의 자동 열만있을 수 있으며 키로 정의해야합니다. – hh54188

+0

autoincrement를 먼저 제거하기 위해 변경하십시오. – scaisEdge

1

? "내 질문 뭐가 잘못"

쿼리 입니다. 기본 키 id을 테이블에 놓은 다음 즉시 다시 추가하십시오. 쿼리가 작동하기 때문에 오류 메시지가 없습니다.

template_id은 테이블의 기본 키가 아닙니다. 이것은 작동합니다 : 당신이 원하는대로

ALTER TABLE ts_template_size drop index `template_id`; 

귀하의 id 기본 키는 유지됩니다.

이 ( template_id이 테이블에 무엇 임) MUL 인덱스 지정에 대한 자세한 내용은이 답변을 참조하십시오 :의 https://stackoverflow.com/a/15268888/1250190

+0

@ hh54188 http://stackoverflow.com/q/40297345/1250190에 표시되는 create table 쿼리는'template_id '는'ts_template_size' 테이블의 기본 키가 아닙니다. – pjd

관련 문제