본문 바로가기
기타

[Django/Devroup] Mysql과 django의 unique 속성 호환 문제

by 항붕쿤 2023. 12. 18.

Devroup에서 username 중복을 허용하기 위해 AbstractUser 모델 username 필드의 unique 속성을 삭제시켜 재배포를 했다. 그런데..

개띠용??

난 분명 unique 속성을 삭제했는데 왜 중복오류가 발생하는 것일까??

그래서 아예 새 데이터베이스를 생성하고 다시 migrate를 해보았다.
그 결과..

mysql은 조건부 unique 제약 조건을 지원하지 않는다고 한다.
mysql이 이렇게 쓰기 힘든 RDB였나..

어쨌든 해결방법은 간단하다.

select * from information_schema.table_constraints where table_name = '테이블 이름';

위 코드로 제약 조건을 갖고 있는 모든 필드를 찾는다.

그 후

ALTER TABLE '테이블 이름' DROP INDEX '필드 이름';

위 코드로 필드의 unique 제약 조건을 삭제해준다.
DROP INDEX로 삭제한 이유는 unique 제약 조건은 내부적으로 unique Index(고유 인덱스)를 사용해 구현되어 해당 필드의 index를 삭제하면 unique 제약 조건은 자동으로 삭제되기 때문이다.

실행 전

.

실행 후