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 제약 조건은 자동으로 삭제되기 때문이다.

.

'기타' 카테고리의 다른 글
| [웹 해킹/드림핵] XSS와 CSRF의 차이 (0) | 2024.12.02 |
|---|---|
| [Django/Devroup] Devroup (0) | 2023.12.18 |
| [Django/Devroup] django-allauth 로그인/로그아웃할 때 나오는 alert창 없애는 법 (2) | 2023.12.17 |
| [Django/Devroup] MYSQL에 이모지가 저장되지 않는 문제 (0) | 2023.12.17 |
| [Django/Devroup] 검색된 객체들을 정렬시키는 법 (feat. GET방식으로 전달된 데이터를 보존하는 법) (2) | 2023.12.03 |