본문 바로가기
MySql

MySQL (InnoDB) : 열 삭제 필요, 외래 키 제약 조건 및 인덱스

by 베이스 공부 2020. 11. 15.
반응형

내 테이블은 다음과 같습니다.

CREATE TABLE `alums_alumphoto` (  
  `id` int(11) NOT NULL auto_increment,  
  `alum_id` int(11) NOT NULL,  
  `photo_id` int(11) default NULL,  
  `media_id` int(11) default NULL,  
  `updated` datetime NOT NULL,  
  PRIMARY KEY  (`id`),  
  KEY `alums_alumphoto_alum_id` (`alum_id`),  
  KEY `alums_alumphoto_photo_id` (`photo_id`),  
  KEY `alums_alumphoto_media_id` (`media_id`),  
  CONSTRAINT `alums_alumphoto_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media_mediaitem` (`id`),  
  CONSTRAINT `alum_id_refs_id_706915ea` FOREIGN KEY (`alum_id`) REFERENCES `alums_alum` (`id`),  
  CONSTRAINT `photo_id_refs_id_63282119` FOREIGN KEY (`photo_id`) REFERENCES `media_mediaitem` (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8  

photo_id 열을 삭제하고 싶습니다. 아마도 외래 키 제약 조건과 인덱스를 삭제해야 할 것입니다.

문제는 열을 삭제하려고 할 때 오류가 발생한다는 것입니다.

... 인덱스를 삭제하려고 할 때 (위와 동일) 외래 키 제약 조건을 삭제하려고 할 때 :

이 모든 것을 어떤 순서로해야합니까? 어떤 정확한 명령을 사용해야합니까?

 

해결 방법

 

확실한 것은 중복 테이블을 만드는 것입니다.

> CREATE TABLE alums_alumphoto_new LIKE alums_alumphoto;
> ALTER TABLE .... // Drop constraint
> ALTER TABLE .... // Drop KEY
> ALTER TABLE .... // Drop the column
> INSERT INTO alums_alumphoto_new (SELECT id, alum_id, photo_id, media_id, updated FROM alums_alumphoto);
> RENAME TABLE alums_alumphoto TO alums_alumphoto_old, alums_alumphoto_new TO alums_alumphoto;

RENAME TABLE을 실행하는 중에 오류가 발생하면 일부 다른 테이블에이 테이블을 참조하는 외래 키 제약 조건이있을 수 있습니다.이 경우 전체 접근 방식은 어리 석습니다. :)

 

참조 페이지 https://stackoverflow.com/questions/338978

 

 

반응형

댓글