아무 이유 없이 MySQL Foreign key 안 걸릴 때.

Development / MySQL / DB

진짜 아~무 이유 없이(컬럼 타입도 맞고, 뭐 여튼 이론적으로 절대 FK가 안걸릴 이유가 없는 상태일 때) Error Code: 1215. Cannot add foreign key constraint를 내뿜으며 FK가 안 걸릴 때에는 레퍼런스 테이블에 FK 락이 걸려있을 가능성이 높다. 트랜잭션이 잦은 라이브 상태의 테이블이라면 더더욱! 실제 이를 확인하기 위해서는

SHOW ENGINE INNODB STATUS;  

를 실행해 InnoDB 엔진 상태를 확인한다. 여기서 LATEST FOREIGN KEY ERROR 부분을 확인해보면, (개행이 '\n'으로만 표현되어 한 줄로 쭉 출력될 수 있으니, 익숙한 텍스트 에디터를 꺼내 먼저 보기 쉽게 개행 문자로 치환하자.) 어떤 테이블에서 실제 락이 걸려있는지 확인 할 수 있다.

이를 해결하기 위해서는

SET FOREIGN_KEY_CHECKS=0;  

를 실행해 현재 DB 접속 세션에 대해 FK 검사를 일시적으로 무시하도록 만들고 다시 FK를 걸면 아주 잘 된다!

SHOW ENGINE INNODB STATUS라는 명령어는 처음 보는데, 다양한 정보를 보여주고 있어서 놀랐다. 앞으로 애용하게 될 것 같다.

Share on : Twitter, Facebook or Google+