색인 이름 'index_foo' on table 'bar' already exists가 나왔을 때 해결

3252 단어 MySQLRailserror

소개



rails 앱을 만드는 동안 제목과 같은 오류로 인카운트했기 때문에 비망록으로

색인 이름 'index_foo' on table 'bar' already exists



같은 이름의 index가 있다는 오류입니다.

index는 뭐라고하는 사람은 이쪽을 부디 -> 데이터베이스에 인덱스를 붙이는 방법

우선 mysql에 로그인하여 상태 확인
참고 기사 rails generate migration 에러가 나왔을 때의 대처법

terminal
$ mysql -u ユーザ名 -D database名 -p

-u ユーザ名指定するオプション
-D 接続先databaseを指定するオプション
-p パスワードを送信するオプション

데이터베이스 이름을 모르는 경우 config/database.yml
migration이 어디까지 진행되고 있는지 확인한다. rails의 log에도 써 있지만, 다시 확인.

mysql
mysql> select * from schema_migrations;


실행된 마이그레이션 파일이 나옵니다.
제 경우에는 20200613이 실행되고 있어야 합니다만 나오지 않았습니다.

테이블이 작성되었는지 확인

mysql
mysql> show columns from hoges; # hogeには作成したtable名を入れてください


테이블이 존재하는 것 같습니다. 그렇지 않으면 오류가 발생합니다.

다음은 index가 붙어 있는지 확인합니다.

mysql
mysql> show index from hoges;


색인이 붙여져 있습니다.

오류 내용은 同じ名前のindexがすでに存在しますよ였습니다.

그렇다면 마이그레이션 파일을 쓰지 못할 것입니다.
익숙하지 않지만, 생각하는 절로 이번은 모델 작성시에 references를 사용했습니다. 이거!

조사해 보면 外部キー作成時は自動でindexを貼ってくれる 같다. 이중으로 붙이고 있었습니다...

다음 그림은 좋은 예입니다.

고쳤습니다↓


외래 키를 만들 때 조심하십시오.

참고 기사



외래 키를 참조 유형 열에 저장
외래 키 개요 및 제약 조건을 사용하는 장점 단점

좋은 웹페이지 즐겨찾기